双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

C# 委托多窗体操作传值问题

abchao8 abchao8 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
MID多窗体(使用了using WeifenLuo.WinFormsUI.Docking多窗口界面)主要文件环境具体如下:
主窗体: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.

cailiaosun

C#多窗体应用程序中的数据传递策略详解

接下来的章节中,我们将探讨几种主要的数据传递方法,包括通过公共属性、构造函数参数、事件和委托、和Show()方法以及全局数据共享等。这些方法各有特点,适用于不同的场景和需求,了解它们将帮助开发者在实际开发中做出更合适的选择。公共属性是面向对象编程(OOP)中一个非常基础的概念,它提供了一种直接访问和修改对象内部状态的方式。在窗体间数据传递的场景中,公共属性允许一个窗体类对外公开特定的数据字段,从而使得其他窗体类可以访问这些数据。在.NET等支持OOP的编程语言中,公共属性通常被声明为。

豪欧巴

C# 跨窗体操作中的委托应用全解析

在C#和许多其他编程语言中,委托(Delegates)是一种类型,它可以持有对具有特定参数列表和返回类型的方法的引用。简单来说,委托相当于“函数指针”,但与传统意义上的函数指针不同,委托是面向对象的、类型安全的,并且更加灵活。在C#中,委托(Delegate)是一种类型,它可以引用具备特定参数列表和返回类型的方法。委托使得我们可以将方法作为参数传递给其他方法,或者将方法挂载到事件上。这为实现松耦合的编程提供了可能,从而提高了代码的可复用性和模块化。

高傲的大白杨

两个Form之间传值Demo

通过深入学习和实践"两个Form之间传值Demo",开发者可以进一步提升在C#界面编程中的技能。

蓝色夏威夷666

C# winform窗体间传值(使用委托或事件)

该项目展示了C# WinForms中窗体间传值的三种方法:对象引用、委托和事件机制。重点实现基于委托与事件的解耦通信,支持多窗体订阅主窗体消息,体现观察者模式的应用。代码结构清晰,注释详尽,适用于学习

一羽清宁
评论 10
收藏 已收藏
分享
返回顶部
abchao8
C# 111,129 成员 642,540 内容