在表单加载之间使用相同的句柄保持控制

时间:2014-01-20 10:20:00

标签: c# winforms controls handle

我得到了一个带有控件的表单,我使用另一个应用程序。每次我显示窗口时,另一个应用程序加载缓慢启动它。 所以我提前加载了二级应用程序。我使用一个控制句柄作为参数,告诉应用程序如何使用句柄。 这第一次工作正常。当我关闭对话框(单击确定按钮,将对话框结果设置为ok)并再次打开它时,控制手柄发生了变化。

如何在对话框的两个载荷之间保持控制手柄相同?

public partial class ListForm : Form
{

FilterDialog filterDialog;

public ListForm()
{
     InitializeComponent();
     filterDialog = new FilterDialog(); //this is where i load my second form, wich i draw in
}

对话框我画了

public FilterDialog()
{
    InitializeComponent();
    string applicationlocation = @"...";
    //set the argument
    string hexvalue = btnImage.Handle.ToInt32().ToString("X8");
    process.StartInfo.Arguments = "0x" + hexvalue;
    process.StartInfo.FileName = applicationlocation;
    process.StartInfo.UseShellExecute = false;
    process.Start();
}

private void FilterDialog_Load(object sender, EventArgs e)
{
    if (this.filter != string.Empty)
       txtFilter.Text = filter;
}

1 个答案:

答案 0 :(得分:1)

此代码似乎

class CustomHandleForm : Form
{
    protected override void OnClosed(EventArgs e)
    {
        base.OnClosed(e);
        base.DestroyHandle();
    }

    protected override void DestroyHandle() { }        
}

经过测试:

Form f = new CustomHandleForm();
f.Show();
var h1 = f.Handle;
f.Hide();
f.Show();
var h2 = f.Handle;

Trace.Assert(h1 == h2);