C# 形成沟通
我有两种表格,包括: 表格1: 2按钮名称: btnCopy和 btnPaste (内部有rtb.Copy()和rtb.Paste()等函数,这些函数应该适用于Form2中的richtextbox) 表格2: 1名为:rtb的RichTextBox 我的问题是: 如何在Form1中的2个按钮(及其函数)和Form2中的richtextbox之间进行通信 比如:当我在Form2的richtextbox(rtb)中键入文本,然后选择All text,然后按下Form1中的CopyButton(btnCopy),文本的复制应与从Form1中按下PasteButton(btnPaste)时相同,复制的文本应粘贴在Form2上的richtextbox(rtb)中C# 形成沟通,c#,winforms,communication,C#,Winforms,Communication,我有两种表格,包括: 表格1: 2按钮名称: btnCopy和 btnPaste (内部有rtb.Copy()和rtb.Paste()等函数,这些函数应该适用于Form2中的richtextbox) 表格2: 1名为:rtb的RichTextBox 我的问题是: 如何在Form1中的2个按钮(及其函数)和Form2中的richtextbox之间进行通信 比如:当我在Form2的richtextbox(rtb)中键入文本,然后选择All text,然后按下Form1中的CopyButton(btn
如何才能做到这一点?在Form1上创建一个公共属性,然后从Form2进行设置。 编辑: 表格1: 公共字符串textfortb{get;set;} 表格2: Form1 a=新的Form1();
a、 TextForRtb=rtb.Text Sol1:将一个表单传递给另一个表单,如构造函数中的
Form1(表单父项){….}
,那么您应该可以看到它的公共属性和方法
Sol2:创建自定义事件,以便在富文本框上的文本发生更改时引发该事件,这样,使用该富文本框初始化表单的表单将执行一些操作,例如启用/禁用按钮或其他操作
…事实上,对于这种行为有很多解决方案,我想知道为什么您需要将文本框的形式与按钮的形式不同,而按钮在业务逻辑中似乎非常紧密地联系在一起 您可以在
Form2
中公开两种方法GetRichTextBoxContent
和SetRichTextBoxContent
。
这将更新Form2
中richTextBox
的内容
然后您可以处理Form2
formForm1
注意:这里主要考虑的是如何获得Form2
的实例。获得该实例取决于您的实现
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 );
}
}
假设您有Form1
和ToolStrip按钮
namePasteToolStripButton
类似:
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
}
public void PasteText()
{
rtbChild.Text = Clipboard.GetText(); // this one simulates the rtb.Paste()
}
public void CopyText()
{
rtb.Copy();
}
}
在Form2
中,需要添加名为PasteText
和CopyText
的Public
方法,如:
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
}
public void PasteText()
{
rtbChild.Text = Clipboard.GetText(); // this one simulates the rtb.Paste()
}
public void CopyText()
{
rtb.Copy();
}
我还将Form2
中的RichTextBox
命名为rtbChild
,因此每次单击时,例如“粘贴”都会复制到Form2
中的RichTextBox中的RichTextBox
,Form2中的RichTextBox
中。任何原因,为什么需要两个表单,您都可以使用相同表单的RichTextBox。如果您仍然需要使用两个表单,第二个是模态的吗?form1用作容器,顺便说一句,我正在做IDE@雅各布:Form1会先调用Form2吗?还是其他方式?或者其他一些表单调用Form1和Form2(我怀疑)?@Edper,可以在Form1中有另一个名为Btnew的按钮,然后将调用Form2,然后方法将继续…@Elegiac您的意思是Form1是MDI父级,Form2在MDI中?rtb.Copy代码和rtb.Paste执行在哪里,您不需要复制
或粘贴
,因为此.richTextBox1.Text
将为您获取并设置内容。它不起作用,先生。。。每次我从rtb中选择文本,然后按按钮\u从form1复制和按钮\u粘贴,然后我在rtb中选择没有更改,先生。。。它将焦点放在按钮上。我应该怎么做?rtb.Copy代码和rtb.Paste执行在哪里,先生?form1中的错误名称“rtb”在当前上下文中不存在。。。rtb必须在表格2中,先生@Edperchange rtb到您的RichTextBox的名称让我们假设如果名称是RichTextBox1,那么它应该是RichTextBox1。rtb必须是格式2,先生。。。2仅在带有richtextboxi的form1和form2上的按钮我也尝试推荐“rtb.Copy();”,但出现另一个错误,指向form1中的内容。加载:指定为此表单的MdiParent的表单不是MdiCOntainer。