C# 委托多窗体操作传值问题
主窗体:mainForm;子窗体:cShow
现在是通过mainForm打开cShow,cShow里加载了webBrowser1。
通过 private void button1_Click(object sender, EventArgs e)这个是能正常进行与主窗体mainForm的交互的。
通过 public void cCall_js(string sms){//执行代码}却没有任何反应。
因cShow的webBrowser1要与脚本交换,在cShow里建了一个用于与JS的类
cShow具体的代码如下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
using System.Security.Permissions;
using System.Runtime.InteropServices;
namespace htmlcode
{
//通过这里的委托进行与父窗体的交互
public delegate void DelegateChangeTextVal(string TextVal);
public partial class web_Browse : WeifenLuo.WinFormsUI.Docking.DockContent
{
/// <summary>
/// 委托
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public delegate void MyDelegate(object sender, MyEventArgs e);
public event MyDelegate MyEvent;
// 2.定义委托事件
public event DelegateChangeTextVal ChangeTextVal;
//此类必须对 COM 可见,才能从Javascript中调用。
[ComVisible(true)]
public class sCall
{
public sCall()
{
}
public void cCall_js(string sms)
{
//这里想像能button1_Click事件一样操作到父窗休.但这里不管怎么操作都无反应,也没有错误。
}
}
public web_Browse()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.ScriptErrorsSuppressed = true; //禁用错误脚本提示
webBrowser1.IsWebBrowserContextMenuEnabled = false; //禁用右键菜单
webBrowser1.WebBrowserShortcutsEnabled = false; //禁用快捷键
webBrowser1.AllowWebBrowserDrop = false;//禁止拖拽
webBrowser1.ScrollBarsEnabled = false;//禁止滚动条
webBrowser1.Navigate(Application.StartupPath + "\\html\\index.html");
webBrowser1.ObjectForScripting = new sCall();
}
private void button1_Click(object sender, EventArgs e)
{
ChangeMainFormText("成功");//这里能成功更新主窗体
//
}
public void ChangeMainFormText(string TextVal)
{
ChangeTextVal(TextVal);
}
}
}
}相关推荐
c# 用委托事件实现两窗体传值
在本案例中,“c# 用委托事件实现两窗体传值”是一个典型的跨窗体通信问题,其中委托和事件被用来在子窗体关闭时向父窗体发送数据。以下是对这个主题的详细解释:1.
C#多窗体应用程序中的数据传递策略详解
接下来的章节中,我们将探讨几种主要的数据传递方法,包括通过公共属性、构造函数参数、事件和委托、和Show()方法以及全局数据共享等。这些方法各有特点,适用于不同的场景和需求,了解它们将帮助开发者在实际开发中做出更合适的选择。公共属性是面向对象编程(OOP)中一个非常基础的概念,它提供了一种直接访问和修改对象内部状态的方式。在窗体间数据传递的场景中,公共属性允许一个窗体类对外公开特定的数据字段,从而使得其他窗体类可以访问这些数据。在.NET等支持OOP的编程语言中,公共属性通常被声明为。
C# 跨窗体操作中的委托应用全解析
在C#和许多其他编程语言中,委托(Delegates)是一种类型,它可以持有对具有特定参数列表和返回类型的方法的引用。简单来说,委托相当于“函数指针”,但与传统意义上的函数指针不同,委托是面向对象的、类型安全的,并且更加灵活。在C#中,委托(Delegate)是一种类型,它可以引用具备特定参数列表和返回类型的方法。委托使得我们可以将方法作为参数传递给其他方法,或者将方法挂载到事件上。这为实现松耦合的编程提供了可能,从而提高了代码的可复用性和模块化。
两个Form之间传值Demo
通过深入学习和实践"两个Form之间传值Demo",开发者可以进一步提升在C#界面编程中的技能。
C# winform窗体间传值(使用委托或事件)
该项目展示了C# WinForms中窗体间传值的三种方法:对象引用、委托和事件机制。重点实现基于委托与事件的解耦通信,支持多窗体订阅主窗体消息,体现观察者模式的应用。代码结构清晰,注释详尽,适用于学习



