调用事件跳过消息框

时间:2012-12-14 14:52:08

标签: c# winforms events messagebox

这是一种奇怪的行为 我正在调用TreeView_Drag_Drop事件(我不认为事件的类型是相关的,但无论如何)。在我的活动中,我连续打了3 MessageBox。像这样:

MessageBox.Show("A");
MessageBox.Show("B");
MessageBox.Show("C");

输出将为BC。 如果我在MessageBox.Show("A");上设置断点,它将停在那里,但不会弹出MessageBox。  
如果我替换我的代码:

Console.WriteLine("A");
MessageBox.Show("B");
MessageBox.Show("C");

输出将是A (in the console)BC

我的最后一次尝试是制作一个虚拟MessageBox来查看编译器是否仅排除了他看到的第一个框。所以我替换了我的代码:

MessageBox.Show("Kill this box");
MessageBox.Show("A");
MessageBox.Show("B");
MessageBox.Show("C");

输出为ABC

如果没有任何进一步的代码,是否有一个简单的解释? (无论如何这是事件中唯一的代码)因为我无法解释这种行为。


使用其他测试进行更新

我尝试将它们放入foreach loop

foreach ( // logic )
{
  MessageBox.Show("A");
  MessageBox.Show("B");
  MessageBox.Show("C");
}

对于我的第一次迭代,输出将为BC 但对于所有其他迭代,输出将为ABC。就像它已经排除了一个MessageBox所以可以通过。


代码更新

此代码在原型上完美运行。但完全相同的代码不在我的程序中 请注意,对于多语言支持和填充,表单由反射调用。 (不要认为这完全相关)。

    private void Form1_Load(object sender, EventArgs e)
    {
        treeView1.Nodes.Add("Test");
        this.treeView1.ItemDrag += new ItemDragEventHandler(this.treeView_ItemDrag);
        this.treeView2.ItemDrag += new ItemDragEventHandler(this.treeView_ItemDrag);
        this.treeView1.DragEnter += new DragEventHandler(this.treeView_DragEnter);
        this.treeView2.DragEnter += new DragEventHandler(this.treeView_DragEnter);
        this.treeView1.DragDrop += new DragEventHandler(this.treeView_DragDrop);
        this.treeView2.DragDrop += new DragEventHandler(this.treeView_DragDrop);
    }

    private void treeView_DragEnter(object sender,
        System.Windows.Forms.DragEventArgs e)
    {
        e.Effect = DragDropEffects.Move;
    }

    private void treeView_ItemDrag(object sender,
        System.Windows.Forms.ItemDragEventArgs e)
    {
        DoDragDrop(e.Item, DragDropEffects.Move);
    }

    private void treeView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    {

        MessageBox.Show("A");
        MessageBox.Show("B");
        MessageBox.Show("C");

    }

我知道它有效。问题是它不在我的程序中,而且它的代码完全相同。我正在寻找任何可能的原因,为什么它在我的解决方案中表现不同但我找不到任何东西。

0 个答案:

没有答案