Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 形成沟通_C#_Winforms_Communication - Fatal编程技术网

C# 形成沟通

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

我有两种表格,包括:

表格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)中


如何才能做到这一点?

在Form1上创建一个公共属性,然后从Form2进行设置。 编辑: 表格1: 公共字符串textfortb{get;set;}

表格2: Form1 a=新的Form1();
a、 TextForRtb=rtb.Text

Sol1:将一个表单传递给另一个表单,如构造函数中的
Form1(表单父项){….}
,那么您应该可以看到它的公共属性和方法

Sol2:创建自定义事件,以便在富文本框上的文本发生更改时引发该事件,这样,使用该富文本框初始化表单的表单将执行一些操作,例如启用/禁用按钮或其他操作


…事实上,对于这种行为有很多解决方案,我想知道为什么您需要将文本框的形式与按钮的形式不同,而按钮在业务逻辑中似乎非常紧密地联系在一起

您可以在
Form2
中公开两种方法
GetRichTextBoxContent
SetRichTextBoxContent
。 这将更新
Form2
richTextBox
的内容

然后您可以处理
Form2
form
Form1

注意:这里主要考虑的是如何获得
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按钮
name
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
    }
  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。