gpt4 book ai didi

.net - 如何将 ByRef 变量保存到 .net winforms 对话框表单中?

转载 作者:行者123 更新时间:2023-12-02 15:42:06 25 4
gpt4 key购买 nike

我正在创建一个“部门选择器”表单,它将作为模式弹出表单,与我的 Winforms 应用程序的许多“主要”表单一起使用。理想情况下,用户单击文本框旁边的图标,将弹出表单,他们将选择所需的部门,当他们单击“确定”时,对话框将关闭,我将选择为我选择的值更新文本框。

我已经完成了将对话框的所有者传递到对话框表单中并让“确定”按钮单击事件进行正确更新的路线,但这迫使我对表单类型进行 DirectCast,然后我就可以仅在当前表单上重用选择器。

我已经能够在构造函数中使用 ByRef 变量并成功更新值,但它仅在构造函数中有效。如果我尝试将 ByRef 值分配给 Department Picker 类中的某个内部变量,我就会丢失它的引用方面。这是附加在我的表单上的基本代码:

Public Class DeptPicker

Private m_TargetResult As String

Public Sub New(ByRef TargetResult As String)

InitializeComponent()

' This works just fine, my "parent" form has the reference value properly updated.
TargetResult = "Booyah!"

' Once I leave the constructor, m_TargetResult is a simple string value that won't update the parent
m_TargetResult = TargetResult

End Sub

Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click

DialogResult = Windows.Forms.DialogResult.OK

' I get no love here. m_TargetResult is just a string and doesn't push the value back to the referenced variable I want.
m_TargetResult = "That department I selected."
Me.Close()

End Sub

Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click

DialogResult = Windows.Forms.DialogResult.Cancel
Me.Close()

End Sub

End Class

有人可以告诉我我在这里缺少什么或实现此目的的不同方法吗?

注意:代码示例位于 VB.NET 中,但我也会采用任何 C# 答案。 8^D

最佳答案

在这种情况下,我通常要么

  • 编写一个 ShowDialog 函数来执行我想要的操作(例如返回值)或
  • 只需让结果成为对话框中的属性即可。这就是常见文件对话框在 BCL 中执行此操作的方式。然后调用者必须读取该属性才能获取结果。我认为这很好。

您还可以组合这些方法,方法是使结果值成为对话框中的属性,并创建一个返回该属性值的 ShowDialog 方法,可以根据需要作为 ByRef 或作为返回值,具体取决于您的需要。

例如,我会将其添加为使用说明(抱歉,这里没有 VB,并且您说欢迎使用 C#):

using (var dlg = new DeptPicker()) {
if (dlg.ShowDialog() == DialogResult.OK) {
myTextBoxOrWhatEver.Text = dlg.TargetResult;
}
}

在对话框本身中,只需执行以下操作:

void okButton_Click(object sender, EventArgs e)
{
TargetResult = whatever; // can also do this when the selection changes
DialogResult = DialogResult.OK;
Close();
}

不过,我在此示例中没有使用新的 ShowDialog 实现。

关于.net - 如何将 ByRef 变量保存到 .net winforms 对话框表单中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/150010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com