我在VisualStudio工作。
我有这张表格:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void Form1_Load(object sender, EventArgs e)
{
}
public static int signal = 0;
public void button1_Click(object sender, EventArgs e)
{
}
}
}
此用户控件:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Test
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
if (Form1.signal == 1)
{
MessageBox.Show("Signal received!", "Atention!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
private void UserControl1_Load(object sender, EventArgs e)
{
}
}
}
我低下头试图展示“消息框”'来自' UserControl1'当' button1'来自' Form1'点击。基本上,我想改变' signal'的价值。当'按钮1'被压了。我是新手,但是我被时间紧迫,所以非常欢迎你的帮助。有任何想法吗?谢谢!
答案 0 :(得分:1)
button1_Click
是您单击表单中的按钮时将触发的事件。
创建与其他用户建议相似的活动,或参考this问题并创建一个自定义消息框,其中包含UserControl
作为其内容。
答案 1 :(得分:0)
当您加载UserControl时,它会将Form1.signal视为0,因为您使用该值初始化它。您的UserControl1永远不会知道Form1上的更改。
你需要做的是在UserControl1中设置将被触发的侦听器功能,让我们每10毫秒说一次,这将检查Form1.signal == 1.
检查Interval库,我建议你抽出时间学习一些C#。语言很棒。
答案 2 :(得分:0)
处理容器之间通信的最佳方法是实现观察者类
观察者模式是一种软件设计模式,其中一个称为主体的对象维护其依赖者列表,称为观察者,并通常通过调用其中一种方法自动通知它们任何状态变化。 (维基百科)
我这样做的方法是创建一个Observer类:
1 public delegate void dlFuncToBeImplemented(int signal);
2 public static event dlFuncToBeImplemented OnFuncToBeImplemented;
3 public static void FuncToBeImplemented(int signal)
4 {
5 OnFuncToBeImplemented(signal);
6 }
基本上如此:第一行表示会有其他人实施的功能
第二行正在创建一个在委托函数调用时发生的事件
第三行是创建调用事件的函数
所以在你的UserControl中你应该添加一个这样的函数:
private void ObserverRegister()//will contain all observer function registration
{
Observer.OnFuncToBeImplemented += Observer_OnFuncToBeImplemented;
/*and more observer function registration............*/
}
void Observer_OnFuncToBeImplemented(int signal)//the function that will occur when FuncToBeImplemented(signal) will call
{
MessageBox.Show("Signal received!", "Atention!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
并在您的表单中,您应该执行以下操作:
public static int signal = 0;
public void button1_Click(object sender, EventArgs e)
{
Observer.FuncToBeImplemented(signal);//will call the event in the user control
}
现在,您可以将此功能注册到一大堆其他控件和容器中,它们都将获得信号
我希望这会有所帮助:)。