如何在另一个按钮语句中使用检查按钮?c#
我有个问题。我想使用if语句检查按钮是否被单击。例如:如何在另一个按钮语句中使用检查按钮?c#,c#,C#,我有个问题。我想使用if语句检查按钮是否被单击。例如: public void button1_Click(object sender, EventArgs e) { while (1) { ... ... ... if (Button2 == clicked) { break; } } } 但它不是这样工作的,因为“.click”只
public void button1_Click(object sender, EventArgs e)
{
while (1)
{
...
...
...
if (Button2 == clicked)
{
break;
}
}
}
但它不是这样工作的,因为“.click”只能位于“+=”或“-=”的左侧。你知道我如何检查按钮2是否被点击了吗
代码如下:我想检查按钮2以停止“程序”。
按钮2的检查几乎在代码末尾;)
public void按钮1\u单击(对象发送者,事件参数e)
{
随机rnd=新随机();
国际过滤公司;
int ExFilterPos;
弦1;
int[]EmLB=新int[126];
int[]ExLB=新int[126];
int-LBEmAnzahl=0;
int LBEmTot=0;
int LBExAnzahl=0;
int-lbextort=0;
UInt32 C_Zyklen;
UInt32-Zyklen;
Roche.DetectionControl2.Device_Filterwheels.ELBPowerState LB_On=Roche.DetectionControl2.Device_Filterwheels.ELBPowerState.LBOn;
Roche.DetectionControl2.Device_Filterwheels.ELBPowerState LB_Off=Roche.DetectionControl2.Device_Filterwheels.ELBPowerState.LBOff;
Roche.DetectionControl2.Device_Filterwheels.fiweGetLBResponse光屏障;
string Text=string.Format(“Filterrad Dauertest\r\nGestart am{0:d}um{0:t}\r\n\r\n”,DateTime.Now);
System.IO.File.writealText(@“TestLogFile\Filterrad_Dauertest1.txt”,Text);
Instrument.N1_DetectionControl2_1_Device_Filterwheels.fiweInitFilter();
系统.线程.线程.睡眠(50);
而(ZyklenHm.)
您可以使用标志
变量来实现这一点。声明标志
值并将其初始化为假
。在按钮2上单击将标志值更改为真
,如下所示
private bool flag= false;
private void button2_Click(object sender, EventArgs e)
{
flag= true;
}
public void button1_Click(object sender, EventArgs e)
{
//Use flag to check whether button 2 has clicked or not
if (flag)
{
}
else
{
}
}
除了您想要的奇怪行为之外..而且由于您没有使用线程,您有以下选项:
本地函数(.Net>4.7)
线程
Thread newThread;
private void Button1_Click()
{
newThread = new Thread(YourBreakableProcess);
newThread.Start();
}
private void Button2_Click()
{
newThread.Join();
}
private void YourBreakableProcess()
{
//Your breakable process
}
异步方法
我希望你能找到解决办法。干杯
编辑:
因为您想要的是中断您正在做的任何事情的过程,所以如果您没有绑定到特定的框架版本,那么您唯一的选择就是上面所示的本地功能
BackgroundWorker并检查每一步按钮2是否按下了其他答案中提到的标记
线程,并制作线程。按下按钮2时加入
编辑2:
使用线程更新了答案,我建议如果您使用此选项,最好使用BackgroundWorker,因为您将拥有整个流程的控制权,只在可以打破它的位置打破它。Button2没有被点击。Button1被点击。因为您在Button1的点击处理程序中。或者这两个按钮使用的是同一个处理程序吗?(在这种情况下,它可能应该重新命名。)你到底想做什么?@AlekDepler:你的猜测可能恰好是正确的。但是OP仍然应该在问题中澄清。你得到这个错误是因为。单击是一个事件,而不是一个属性,你已经得到了答案,你有一个选项是使用一个标志。不,有标志的东西不起作用,因为如果程序RAM在Button1语句中,它在完成打孔过程之前不会离开它,所以如果我按下Button1启动程序,它将完成它,只有现在我才能将button2标志设置为true它是如何工作的,我用线程制作的,谢谢alot@TareqB。听到这个消息很高兴,但我真的建议你使用backgro相反,它将很容易实现,并且没有任何不良行为,因为您可以选择何时中断循环,只是在您的进程中的任何步骤之前检查工人的属性。加入将破坏线程在任何步骤中,假设您在文件创建中间进行连接,例如。
private bool flag= false;
private void button2_Click(object sender, EventArgs e)
{
flag= true;
}
public void button1_Click(object sender, EventArgs e)
{
//Use flag to check whether button 2 has clicked or not
if (flag)
{
}
else
{
}
}
private void B_Click(object sender, EventArgs e)
{
bool clickFlag = false;
void Click(object sender2, EventArgs e2)
{
clickFlag = true;
}
b2.Click += Click;
while (!clickFlag)
{
Thread.Sleep(1);
}
b2.Click -= Click;
//Continue with your stuff
}
Thread newThread;
private void Button1_Click()
{
newThread = new Thread(YourBreakableProcess);
newThread.Start();
}
private void Button2_Click()
{
newThread.Join();
}
private void YourBreakableProcess()
{
//Your breakable process
}