gpt4 book ai didi

c# - 在 TextChanged 事件中将信息从打开的表单传递到打开的表单

转载 作者:行者123 更新时间:2023-11-30 16:16:22 30 4
gpt4 key购买 nike

我仍在学习 C#,如果这是一个愚蠢的问题,请原谅我,也请原谅我的长篇文章,因为我不确定如何说这个,而不是“长”的方式。

我的场景:

我正在使用 DockPanel Suite对于我的应用程序,我有一个 ParentForm、一个 NotesFormBrowserForm(我实际上还有很多 BrowserForm 类型,但如果我能让它对一个工作,我应该能够让它对其他人工作)

因此 ParentForm 在应用程序启动时加载,当它加载时加载 NotesFormBrowserForm 通过按钮单击事件从ParentForm,然后该实例打开并保持打开状态,不会关闭。

因此,当我在 NotesForm 中输入信息时,我已经拥有了所有 3 种形式的已建立实例。 (我认为这就是问题所在)

我的目标是将在 NotesForm 上的 textBox1 中键入的信息获取到一个字符串变量,让我们在 上将其称为 notesText >BrowserForm 而无需单击 NotesForm 上的任何内容,我认为这将通过 TextChanged 事件进行。

我目前能够使用属性(获取、设置)将信息传递到表单,但我必须单击 NotesFormBrowserForm 上的按钮让它发生。

我包括了一种简化的代码来展示我目前是如何做的。我的完整代码非常大,所以只是想避免混淆并展示我正在进行的工作的概念。

Parent Form

public partial class parentForm : Form
{
private notesForm notesForm = new notesForm();
public parentForm()
{
InitializeComponent();

}
private void parentForm_Load(object sender, EventArgs e)
{
notesForm.Show(mainDock, DockState.DockLeft);

}
private void tb1_Click(object sender, EventArgs e)
{
BrowserForm.notesText= notesForm.passInfo;
}

NotesForm

public partial class notesForm : DockContent
{
private string _passInfo;
public notesForm()
{
InitializeComponent();

}
public string passInfo
{
get { return textBox1.Text; }
set
{
_passInfo = value;
textBox1.Text = _passInfo;
}
}

}

BrowserForm

public partial class BrowserForm : DockContent
{
private string passInfo;
public BrowserForm()
{
InitializeComponent();

}
public string passInfo
{
get
{
return _passInfo;
}
set
{
_passInfo = value;
notesText = _passInfo;
}

}
string notesText;
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(notesText);
}
}

}

所以这目前有效,但要使其正常工作,我必须在父表单上单击一个按钮,然后在浏览器表单上单击一个按钮。理想情况下,我需要它在您在注释表单的文本框中完成输入后将该信息传递给浏览器表单。如果有帮助,输入到文本框中的信息是静态的,长度始终为 9 个字符,由数字(电话号码)组成。

还有我的应用程序的一些背景。我在工作中使用它来访问我们内联网中的各种工具。它会自动让您登录,将它们整合到一个应用程序中,而不是打开 40 - 80 个不同的浏览器窗口,并且最终(希望)会自动从这些工具中抓取一些信息,这样我们就不必搜索页面了。该工具将自动拉动它。这不是恶意的,我不是垃圾邮件发送者,也不是我为 10 家不同的公司提供 ISP 技术支持的任何事情,每家公司都有 8-10 种服务工具。

任何与此有关的帮助将不胜感激,或者如果有更简单的方法来处理我正在做的事情,我也很乐意听到。另外,如果您想查看我的完整代码(如果有帮助),请告诉我,我不介意发布它,因为它非常麻烦。

最佳答案

我不确定你的问题是否正确。我假设您想将信息从一个子表单传递到另一个子表单。

这样做的一种方法是这样的:

<强>1。创建一个这样的界面:

public interface IDataContainer
{
void SetData(String data);
}

<强>2。让您的 parentForm 实现您的接口(interface):

public partial class parentForm : Form, IDataContainer

并在表单类中为该方法提供一个实现。这个简单的接口(interface)将使实现者能够出于任何目的存储(字符串)数据。

在您的情况下,SetData 方法的实现将充当桥梁,将 notesForm 连接到您的 BrowserForm,在表格,以干净的方式:

public partial class parentForm : Form, IDataContainer
[...]

public void SetData(String dataComingFromOtherSource)
{
this.browserFormInstance.passInfo = dataComingFromOtherSource;
}
[...]

<强>3。将类型为 IDataContainer 的参数添加到每个 child-form 的构造函数中,以便您可以将引用传递给 IDataContainer 实现(那将是你的 parentForm)。这样:

public partial class parentForm : Form
{
private notesForm notesForm = null;

public parentForm()
{
InitializeComponent();

// Note that at this point you are instantiating
// the child-form and you are passing a reference
// to the `parentForm` so that you can pass information
// to it, and from it to whatever other form you may
// need, in an elegant way.
this.notesForm = new notesForm(this);
}

<强>4。最后,在 notesForm 中,将设置数据的逻辑放入您的 container:

public partial class notesForm : DockContent
{
// On runtime this will in fact the `parentForm` object instance.
IDataContainer myDataContainerInstance = null;

public notesForm(IDataContainer myDataContainerInstance) : base()
{
InitializeComponent();

// Assign the reference so that you can use it later
this.myDataContainerInstance = myDataContainerInstance;

textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
this.myDataContainerInstance.SetData(textBox1.Text);
}
}

注意:拥有静态类/单例也是一种解决方案,顺便说一句,更简单......

关于c# - 在 TextChanged 事件中将信息从打开的表单传递到打开的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18502214/

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