C# 使按钮更改为公共值
我在VisualStudio工作 我有以下表格:C# 使按钮更改为公共值,c#,winforms,button,C#,Winforms,Button,我在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
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)
{
}
}
}
当点击“Form1”中的“button1”时,我抬起头试图显示“UserControl1”中的“MessageBox”。基本上,我想在按下“按钮1”时将“信号”的值更改为1。我是新手,但我在这里时间紧迫,所以非常欢迎提供帮助。有什么想法吗?谢谢大家! 按钮1\u Click是当您从表单中单击按钮时将触发的事件
按照其他用户的建议创建一个事件,或者参考问题并创建一个自定义消息框,其中包含您的UserControl作为其内容。加载UserControl时,它会将Form1.signal视为0,因为您使用该值对其进行了初始化。您的UserControl1永远不会知道Form1上的更改 您需要做的是使UserControl1中的侦听器函数被触发,比如说每1000毫秒一次,这将检查Form1.signal==1
检查Interval library,我建议您花点时间学习C语言。该语言非常棒。处理容器之间通信的最佳方法是实现一个observer类 观察者模式是一种软件设计模式,其中一个对象(称为subject)维护其从属对象(称为观察者)的列表,并通常通过调用其方法之一自动通知其任何状态更改。 维基百科 我这样做的方式是创建一个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
}
现在,你可以把这个函数注册到一大堆其他的控件和容器中,它们都会得到信号
我希望这会有所帮助:即使您更改表单中变量信号的值,用户现在如何控制何时发生这种情况?您需要定义一个自定义事件,定义相应的事件处理程序,并将两者连接起来。正如我所说,我是新手,我的知识非常有限。当然,解决这个问题的最好办法是花时间学习这个程序,但不幸的是我没有时间。我以后再做。我举一个你所说的例子就好了!我一定会的!我现在正忙着做一个小项目。但是,按下按钮时,信号会变为1吗?它将在按钮内部更改,但会在外部传输吗?我知道如何创建间隔,但我不知道如何创建侦听器。是的,它会。当您更改信号变量的值时,侦听器函数将知道发生了类似的情况。侦听器函数将每隔10毫秒借助interval调用一次,例如我放置了一个“wait Task.Delay10;”除了“if”语句和“MesageBox”在“while”循环中之外,它还起作用。这是侦听器应该是的还是库中有预定义的内容?