请问VS 2017 C#里为什么toolStripButton对一个绘图控件不起作用啊?而button却可以,里面的代码一模一样。如何解决呢?
//这是toolStripButton按钮事件。
private void btnRect_Click(object sender, EventArgs e)
{
formDesign.vgFormDesign.vg.NewUnit(0, "rect");
}
//另一个button里面的代码一样。
private void button1_Click(object sender, EventArgs e)
{
formDesign.vgFormDesign.vg.NewUnit(0, "rect");
}
toolStripButton的事件里随便弹个提示框可以出来吗?先排查事件是否成功绑定及事件是否可以触发。
估计是引发了窗体的刷新,而你绘图代码不在paint里面,画上去被擦除了
确实应该是Button在你的视图中,会触发视图重绘事件,而你的toolStripButton则不会,都调用下视图的invalidate试下
toolStripButton 和 button 不是同一种控件,toolStripButton 继承自 Companent,button 继承 自 Control,表现在 toolStripButton 没有焦点(不能使用键盘但可使用鼠标),button 有焦点(可使用键盘也可使用鼠 标),在界面重绘时表现机制小蜜蜂论坛回帖机也是不同的。
测试了跟这个没有关系,放到其它区域button也有效,而toolStripButton还是无效。
试一下用Invoke
可以出来,但发现个有趣的事情,在弹出MessageBox后,就可以画了,不弹出时仍然不行。
private void btnRect_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello Rect!");
formDesign.vgFormDesign.vg.NewUnit(0, "rect");
}
大神感觉你的回复应该是问题的原因,请教下如何解决呢?或者有没有类似的案例可供参考下。
感谢,用Invoke不行,但是使用BeginInvoke可以了。
利用委托解决
BeginInvoke(new Action(() => formDesign.vgFormDesign.vg.NewUnit(0, "rect")));