形式的沟通
本文关键字: | 更新日期: 2023-09-27 18:17:32
我有两个表单,包括:
Form1:
2按钮命名:btnCopy和btnPaste(内部有函数,如rtb.Copy();和rtb.Paste ();这应该为richtextbox在Form2)
Form2:
我的问题是:我如何从Form1(及其功能)和Form2中的richtextbox之间的2按钮通信。喜欢:当我在richtextbox(rtb)在Form2中输入文本时,然后我选择文本,然后我从Form1中按下CopyButton(btnCopy),文本应该复制相同,当我从Form1中按下PasteButton(btnPaste),已经复制的文本应该粘贴在richtextbox(rtb),可以在Form2中找到。
我该怎么做呢?
假设您有Form1
和ToolStrip Button
的名称PasteToolStripButton
,如:
public partial class Form1 : Form
{
Form2 formChild;
public Form1()
{
InitializeComponent();
this.Load += new EventHandler(Form1_Load);
}
void Form1_Load(object sender, EventArgs e)
{
formChild = new Form2();
formChild.MdiParent = this;
formChild.Show();
}
private void CopyToolStripButton_Click(object sender, EventArgs e)
{
formChild.CopyText(); // Method to copy Rich Text Box in Form2
}
private void PasteToolStripButton_Click(object sender, EventArgs e)
{
formChild.PasteText(); // Method in Form2 to Paste to the RichTextBox in Form2
}
}
在您的Form2
中,您需要添加名为PasteText
和CopyText
的Public
方法,如:
public void PasteText()
{
rtbChild.Text = Clipboard.GetText(); // this one simulates the rtb.Paste()
}
public void CopyText()
{
rtb.Copy();
}
我还将Form2
中的RichTextBox
命名为rtbChild
,因此每次点击粘贴都会复制到Form2
中的RichTextBox
在Form1上创建一个公共属性,然后从Form2设置它。编辑:在Form1:公共字符串TextForRTB {get;设置;}
Form2:Form1 a = new Form1();
Sol1:将一个表单传递给另一个表单,如构造函数中的Form1(Form parent){....}
,然后您应该看到它的公共属性和方法。
Sol2:创建自定义事件,当富文本框上的文本发生变化时引发它,因此,使用这个富文本框初始化表单的表单将做一些事情,如启用/禁用按钮或其他
…实际上,对于这种行为有很多解决方案,我想知道为什么您需要将文本框置于与按钮不同的形式中,这些按钮在业务逻辑中似乎非常紧密地联系在一起!
可以在Form2
中公开GetRichTextBoxContent
和SetRichTextBoxContent
两个方法。这将在Form2
中更新richTextBox
的内容。
然后你可以在Form1
Form2
的Instance
上工作注:这里的主要想法是如何得到Form2
的Instance
。获取该实例取决于您的实现。
public class Form2 : Form
{
public string GetRichTextBoxContent()
{
return this.richTextBox1.Text;
}
public void SetRichTextBoxContent(string content)
{
this.richTextBox1.Text = content;
}
}
public class Form1 : Form
{
//Based on your implementation
Form2 form2 = new Form2();
private void Button_CopyClick(object sender, EventArgs e)
{
var contentFromRtb = form2.GetRichTextBoxContent();
}
private void Button_PasteClick(object sender, EventArgs e)
{
var someContent = "Content to be copied to text box"
form2.SetRichTextBoxContent(someContent );
}
}