为什么C#里同样的代码toolStripButton和button执行的结果却不一样

请问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")));

发布了74 篇原创文章 · 获赞 0 · 访问量 3092

猜你喜欢

转载自blog.csdn.net/netyou/article/details/104390302