通行证到父窗口
我想问一下,通行证到父窗口
我有一个名为MainWindow
窗口和另一个叫ImportForm
。 在MainWindow
我打电话
private void generate_Window(int num_chart)
{
Window ownedWindow = new ImportForm(num_chart);
ownedWindow.Owner = this;
ownedWindow.Show();
}
在子窗口我做一些东西,我产生了一些变数。像var1,var2,var3。
我希望在子窗口关闭返回var1
,var2
,var3
到MainWindow
并调用一个函数让我们说import_chart(var1, var2, var3)
..
任何帮助将apretiated。 谢谢
这似乎是一个尴尬的设计选择。不管怎么说,这里是你如何能做到这一点:
MainWindow.cs:
private void generate_Window(int num_chart)
{
Window ownedWindow = new ImportForm(num_chart, import_chart);
ownedWindow.Owner = this;
ownedWindow.Show();
}
private void import_chart(int n, string s, bool b)
{
//Do something
}
ImportForm.cs:
private Action<int, string, bool> callback;
public ImportForm(int num_chart, Action<int, string, bool> action)
{
InitializeComponent();
Closed += ImportForm_Closed;
callback = action;
}
private void ImportForm_Closed(object sender, EventArgs e)
{
callback(0, "Test", false);
}
只要改变行动你所需要的参数类型(以及调整ImportForm_Closed (...)也可以使用它们)。
如果有什么不清楚的地方,请告诉我。
是的,它是真正有用的...谢谢了很多...我欠你......你的回答真的很省时。 – Anaisthitos 2011-12-21 17:29:40
如何将事件添加到您的ImportForm“ImportFinished”中,您将值作为eventargs传入。此事件在ImportForm的Close或Closing事件中触发,并在您的MainWindow中处理。 您也可以将ImportForm显示为模式对话框,并在ShowDialog方法返回时读取值。
一个简单的方法来做到这一点是让var1
,var2
和var3
实例变量是在父的范围内可见(如让他们public
),然后在MainWindow
,重视Closed
事件,从(ImportForm)sender
读取变量。
我有我自己的代码的例子。这是通用和明显的,我可以在这里分享。
我已经做了一些沿着这些线。
/// <summary>
/// Show an InputBox similar to the pre-.NET InputBox functionality. Returns the original value when Cancel was pressed.
/// </summary>
/// <param name="OriginalValue">Pre-populated value in the input box</param>
/// <param name="PromptText">Prompt text displayed on the form</param>
/// <param name="Caption">Window caption</param>
/// <returns>InputBoxResult structure containing both the DialogResult and the input text. Warning: The input text will always be returned regardless of the DialogResult, so don't use it if the DialogResult is Cancel.</returns>
public static InputBoxResult Show(string OriginalValue = "", string PromptText = "", string Caption = "") {
InputBox form = new InputBox {
Text = Caption,
lblPrompt = {Text = PromptText},
txtInput = {Text = OriginalValue}
};
InputBoxResult res = new InputBoxResult();
res.Result = form.ShowDialog();
res.Input = form.txtInput.Text;
return res;
}
我创建了一个名为InputBoxResult这样的类:
/// <summary>
/// Represents the results from an InputBox.Show call, including the DialogResult
/// and the input data. Note that the input data is always populated with the
/// user-entered data regardless of the DialogResult - this is inconsistent with
/// the old InputBox behavior and may change in the future.
/// </summary>
public struct InputBoxResult {
/// <summary>
/// Describes the way the dialog was resolved (OK/Cancel)
/// </summary>
public DialogResult Result { get; set; }
/// <summary>
/// User-entered text
/// </summary>
public string Input { get; set; }
/// <summary>
/// Translate this result into a string for easy debugging
/// </summary>
/// <returns></returns>
public override string ToString() {
return "Result: " + Result.ToString() +
"\r\nInput: " + Input.ToString();
}
}
你可以尝试创建一个事件,并把这些变量里面 – jclozano 2011-12-21 22:09:43