将信息从打开的表单传递给TextChanged事件中的打开表单
我仍然在学习C#,所以如果这是一个愚蠢的问题,并且还原谅了长篇文章,因为我不确定如何说另外那么“很长的路要走。将信息从打开的表单传递给TextChanged事件中的打开表单
我的情景:
我使用DockPanel Suite我的申请,我有一个ParentForm
一个NotesForm
和BrowserForm
(其实我有不少更多BrowserForm
类型的,但如果我能得到它的工作到一个我应该能够使它工作的其他人)
所以ParentForm
负载在应用程序启动和加载时,它加载了NotesForm
和BrowserForm
通过一个按钮单击事件被加载从ParentForm
,然后该实例是开放和住宿开放并且不会关闭。
因此,当我输入信息到NotesForm
我已经有一个建立实例所有3种形式。 (我认为是问题)
我的目标是获得了在textBox1
上键入NotesForm
给一个字符串变量的信息让我们称之为它的BrowserForm
notesText
,而无需点击NotesForm
任何事情我会假设会通过TextChanged
事件。
我目前能够使用属性(获取,设置)获取信息到表单,但我必须单击NotesForm
和BrowserForm
上的按钮才能实现此目的。
我包括一种愚蠢的代码,以显示我目前如何做到这一点。我的完整代码非常庞大,只是为了避免混淆并展示我所做的事情。
父窗体
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个字符并且由数字(电话号码)组成。
还有一些我的应用程序的背景。我将其用于访问我们Intranet中的各种工具。它会自动记录您将它们合并到一个应用程序中,而不是打开40 - 80个不同的浏览器窗口,并最终(希望)自动从这些工具中获取一些信息,因此我们不必搜索该页面。该工具将自动将其拉出。这不是恶意的,我不是垃圾邮件发送者或任何我为10个不同的公司提供ISP技术支持的服务,每个公司都有8-10个工具供他们的服务使用。
任何与此有关的援助将不胜感激,或者如果有更简单的方法去了解我在做什么,我也很乐意听到。此外,如果你想看到我的整个代码(如果有帮助)让我知道,我不介意发布它只是非常麻烦。
我不知道,如果有你的问题的权利。我假设你想将信息从一个孩子形式传递给另一个孩子。
这样做会是这样的一种方法:
1.创建一个像这样的接口:
public interface IDataContainer
{
void SetData(String data);
}
2.让你的parentForm
实现你的接口:
public partial class parentForm : Form, IDataContainer
然后给该方法一个表单类的实现。这个简单的接口将使实现者能够为任何目的存储(字符串)数据。
在你的情况SetData
方法的实现将作为一个桥梁,conecting的notesForm
您BrowserForm
,窗体之间传递数据,在干净的方式:
public partial class parentForm : Form, IDataContainer
[...]
public void SetData(String dataComingFromOtherSource)
{
this.browserFormInstance.passInfo = dataComingFromOtherSource;
}
[...]
3.添加一个参数键入IDataContainer
到每个子构造函数的构造函数,以便您可以传递参考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);
}
}
注:有一个静态类/ 单也将是一个解决方案,并通过这种方式简单得多...
是的,你需要连接的TextChanged
事件在NotesForm,就像这样:
public partial class notesForm : DockContent
{
public notesForm()
{
InitializeComponent();
textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
// Get value of text box here and either pass it to the Browser form
// via its constructor or get an instance of the Browser form and use
// the set of a property in the Browser form to store the value
string theTextBoxValue = textBox1.Text;
}
}
@ Karl 我相信这就是我一直在寻找的东西(没有太多的事件经验)谢谢! 我将如何通过构造函数传递它? – Nabbic
文本的圣墙本阿弗莱克 – Jonesopolis
@Jonesy哈哈我知道对不起可能是因为杀人,但更好的是那些烦人的简短的毫无意义的问题。 – Nabbic