2016-11-21 174 views
0

我有一个BaseControl类,它几乎可以完成我需要的所有控件。.Net UserControl实现Show和ShowDialog方法

从我的控制中实施void ShowDialogResult ShowDialog方法很方便。

UPDATE,这是为方便起见,我用我的BaseControls所有的地方,在某些情况下,我想possibilit显示(显示的对话中),他们最简便的代码...

这里在ShowDialog方法的代码,所述方法Show是非常相似:

Form ContainingForm = null; 
public DialogResult ShowDialog(string title, Control parent) { 
    ContainingForm = new Form(); 
    this.Dock = DockStyle.Fill; 
    ContainingForm.Controls.Add(this); 
    ContainingForm.Text = title; 
    // 
    DialogResult res = ContainingForm.ShowDialog(); 
    ContainingForm.Close(); 
    return res; 
} 

private void Close(DialogResult result) { 
    if (ContainingForm != null) { 
    ContainingForm.DialogResult = result; 
    // original code: form is not closing... 
    // ContainingForm.Close(); 
    } 
} 
// button on BaseControl closing the control 
protected void Button_Click(object sender, EventArgs e) { 
    this.Close(DialogResult.OK); 
} 

我试图接近在this post建议,因此关闭在ShowDialog方法。在使用上述帖子的原始版本和修改版本中,该窗口不关闭。

我看过关于发送“关闭”消息到ContainingForm,但使用Invoke也没有工作。

此外,当使用Show而不是ShowDialog时,我会期待其他一些问题,因为表单不会阻塞UI线程吗?

任何人都知道答案?

+0

什么问题了'Form'这让你去尝试这样的事情? –

+0

Form类没有参数化构造函数,所以清楚了这里发生了什么:'ContainingForm = new Form(parent);' – LarsTech

+0

继承与非winforms项目兼容... – neggenbe

回答

0

事实证明,下面的代码似乎工作:

private void Close(DialogResult result) { 
    if (ContainingForm != null) { 
    ContainingForm.DialogResult = result; 
    ContainingForm.Close(); 
    ContainingForm.Dispose(); 
    } 
}