我有一個對話窗口(只是一種形式)可以通過幾種形式調用的類。我希望這個對話的標題根據哪個表單調用而改變。如何找到以前表單的表單名稱?
在對話類中找到調用它的表單的表單名稱(不改變可以調用它的幾種表單的代碼)嗎?
我有一個對話窗口(只是一種形式)可以通過幾種形式調用的類。我希望這個對話的標題根據哪個表單調用而改變。如何找到以前表單的表單名稱?
在對話類中找到調用它的表單的表單名稱(不改變可以調用它的幾種表單的代碼)嗎?
我曾嘗試它只是一個簡單的例子,但使用GetWindowLongPtr你可以得到你的對話框的父窗體。所有的 首先,你必須在對話框中添加此定義:
[DllImport("user32.dll", EntryPoint = "GetWindowLong")]
static extern IntPtr GetWindowLongPtr(IntPtr hWnd, GWL nIndex);
public enum GWL
{
GWL_WNDPROC = (-4),
GWL_HINSTANCE = (-6),
GWL_HWNDPARENT = (-8),
GWL_STYLE = (-16),
GWL_EXSTYLE = (-20),
GWL_USERDATA = (-21),
GWL_ID = (-12)
}
,然後在對話框中,你可以這樣做:
private void Form2_Load(object sender, EventArgs e)
{
IntPtr parentHandle = GetWindowLongPtr(this.Handle, GWL.GWL_HWNDPARENT);
FormCollection fc = Application.OpenForms;
foreach (Form frm in fc)
{
if (frm.Handle==parentHandle)
{
Console.WriteLine(frm.Name); //this is your parent form
}
}
}
反正我覺得它更容易只需調用ShowDialog(this)
,但如果你不能真正改變調用形式,這種方法可能會很方便。
的FormCollection可以幫助你:
FormCollection fc = Application.OpenForms;
foreach (Form frm in fc)
{
MessageBox.Show(frm.Name.ToString());
}
想象一下,你有** 10 **打開的表單(包括對話框),以及該對話框已經從第五個**彈出。你如何檢測感興趣的形式('Application.OpenForms [4]')?你可以很容易地列舉出所有的開放表格,但是你必須篩選出所需的表格,這是主要難點。 –
感謝您的回覆,但我確實考慮過OpenForms屬性,但是,如Dmitry指出的那樣,我需要找到在多個表單可能打開時調用此對話的實際表單名稱。 – SiC99
你可以試試這個在dialogform,你一定要做這個dialogform變得活躍,以防止它發現自己之前。
public Form GetActiveForm()
{
Form activeForm = Form.ActiveForm;
if (activeForm.IsMdiContainer && activeForm.ActiveMdiChild != null)
{
activeForm = activeForm.ActiveMdiChild;
}
return activeForm;
}
假設你正在創建從主窗體的其他對話框(形式),你可以這樣做:
public partial class MyForm : Form
{
//Some code
public void OpenDialog_Click(...)
{
MyOtherForm form = new MyOtherForm();
form.Parent = this;
form.ShowDialog();
}
}
和你的第二個形式:
public partial class MyOtherForm : Form
{
public MyOtherForm()
{
var parent = this.Parent as Form;
if(parent != null)
this.Title = parent.Title;
}
}
如果通過將主人叫對話框像這樣:'dialog.ShowDialog(owner);''你可以在對話框中使用'Owner.Title'。 –
@PeterBons這確實需要改變OP不想要的幾種形式的代碼,但是如果調用不是這樣的話,那麼他應該改變它,因爲這是調用對話框形式的唯一正確方法 – GuidoG
你試過Form .ActiveForm在對話框變爲活動狀態之前? – GuidoG