Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.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# 将数据从form1.richTextBox复制到form2.richTextBox_C#_Winforms - Fatal编程技术网

C# 将数据从form1.richTextBox复制到form2.richTextBox

C# 将数据从form1.richTextBox复制到form2.richTextBox,c#,winforms,C#,Winforms,我正在做一个时钟,为了好玩和学习C 我有时间,开始,停止,清除 但是,我对“注释”部分有疑问。理想情况下,我希望能够将注释写入一个字段,并有一个“编辑”按钮,允许用户打开一个窗口,查看更多与文本编辑相关的选项。(使用Form1富文本框中的文本) 我的问题来自将数据从一个表单复制到另一个表单 代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; us

我正在做一个时钟,为了好玩和学习C

我有时间,开始,停止,清除

但是,我对“注释”部分有疑问。理想情况下,我希望能够将注释写入一个字段,并有一个“编辑”按钮,允许用户打开一个窗口,查看更多与文本编辑相关的选项。(使用Form1富文本框中的文本)

我的问题来自将数据从一个表单复制到另一个表单

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PunchOut
{
public partial class PunchOut : Form
{
    public PunchOut()
    {
        InitializeComponent();
    }
    int i = 0;
    private void button3_Click(object sender, EventArgs e)
    {
        timer1.Enabled = true;
        i++;

        TimeSpan t = TimeSpan.FromSeconds(i);

        textBox2.Text = string.Format("{0:D2}:{1:D2}:{2:D2}",
                                        t.Hours,
                                        t.Minutes,
                                        t.Seconds);
    }

    private void button2_Click(object sender, EventArgs e)
    {
        timer1.Enabled = false;

    }

    private void button1_Click(object sender, EventArgs e)
    {
        textBox2.Clear();
        textBox2.Text = ("00:00:00").ToString();
    }

    private void button6_Click(object sender, EventArgs e)
    {

    }

    public void button4_Click(object sender, EventArgs e)
    {
        new Form2().Show();
        richTextBox1.Text = Form2.richTextBox1.Text;

    }
}
}
以下是Form2代码:

namespace PunchOut
   {
    public partial class Form2 : Form
    {
       public Form2()
       {
            InitializeComponent();
       }

        public void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            richTextBox1.Text = PunchOut.richTextBox1.Text;
        }
    }
}
目前,我收到一个错误,它表明:

非静态字段、方法或属性“PunchOut.PunchOut.richTextBox1”需要对象引用

非静态字段、方法或属性“PunchOut.Form2.richTextBox1”需要对象引用


为什么会出现这些错误?

您在表单2中没有对PunchOut进行新的引用。在表格2中,在类声明下添加以下内容:

PunchOut punchOut;
你可以进入表格2:

namespace PunchOut
{
    public partial class Form2 : Form
    {
       PunchOut punchOut;

       public Form2(PunchOut PUNCHOUT)
       {
            punchOut = PUNCHOUT;
            InitializeComponent();
       }

        public void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            richTextBox1.Text = punchOut.richTextBox1.Text;
        }
    }
}
在原始的“替换”按钮4中,单击:

public void button4_Click(object sender, EventArgs e)
{
        Form2 form2 = new Form2(this);
        form2.Show();
        richTextBox1.Text = form2.richTextBox1.Text;

}
编辑:您应该传递旧的PunchOut,而不是创建新的PunchOut。我已经更新了代码

您可以将文本存储在更易于访问的字符串中。然后让另一个表单调用该字符串

public string yourText;

// down further

yourText = textBox1.Text;

你在表格2中没有新提到PunchOut。在表格2中,在类声明下添加以下内容:

PunchOut punchOut;
你可以进入表格2:

namespace PunchOut
{
    public partial class Form2 : Form
    {
       PunchOut punchOut;

       public Form2(PunchOut PUNCHOUT)
       {
            punchOut = PUNCHOUT;
            InitializeComponent();
       }

        public void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            richTextBox1.Text = punchOut.richTextBox1.Text;
        }
    }
}
在原始的“替换”按钮4中,单击:

public void button4_Click(object sender, EventArgs e)
{
        Form2 form2 = new Form2(this);
        form2.Show();
        richTextBox1.Text = form2.richTextBox1.Text;

}
编辑:您应该传递旧的PunchOut,而不是创建新的PunchOut。我已经更新了代码

您可以将文本存储在更易于访问的字符串中。然后让另一个表单调用该字符串

public string yourText;

// down further

yourText = textBox1.Text;

那里正在进行许多不必要的工作。我希望我解释得足够清楚

细分: 我们添加了一个字符串成员变量,这样我们就可以将RichTextBox的内容放入一个字符串中并传递它,而不是使用RichTextBox控件。 我们更改构造函数以获取一个字符串参数,该参数是您要更改的RTF文本。现在,Form2可以更改任何RTF文本,而不必专门绑定到punchoutForm上的richTextbox1

然后,我们将成员变量的更新更改为窗体关闭时,否则每次击键都会更改它,这是大量不必要的方法调用

namespace PunchOut
{
    public partial class Form2 : Form
    {
         public String richText;
         public Form2(String rText)
         {    
              InitializeComponent();
              this.richTextBox1.Rtf = rText;

         }

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            richText = this.richTextBox1.Rtf;
        }
    }
}
然后在按钮4中单击。使用Rtf包含代码,否则只需使用普通文本框即可

现在,在按钮单击事件处理程序中,我们创建一个新表单并将其分配给变量。然后我们调用showdialog。showdialog的原因是,这将使表单成为最顶层的表单,因此用户无法返回punchout表单并更改richtextbox,这将使Form2中的文本过时,因为它不再代表punchout表单中正确的RTF文本。当用户编辑完文本并关闭表单后,我们通过访问Form2的richText成员变量来请求已编辑的rtf文本。在窗体关闭后可以访问此项的原因是,在方法返回之前,不会释放窗体,因为局部变量位于该方法的范围内

public void button4_Click(object sender, EventArgs e)
{              
    Form2 f2 = new Form2(richTextBox1.Rtf);
    f2.ShowDialog();
    richTextBox1.Rtf= f2.richText;
 } 

那里正在进行许多不必要的工作。我希望我解释得足够清楚

细分: 我们添加了一个字符串成员变量,这样我们就可以将RichTextBox的内容放入一个字符串中并传递它,而不是使用RichTextBox控件。 我们更改构造函数以获取一个字符串参数,该参数是您要更改的RTF文本。现在,Form2可以更改任何RTF文本,而不必专门绑定到punchoutForm上的richTextbox1

然后,我们将成员变量的更新更改为窗体关闭时,否则每次击键都会更改它,这是大量不必要的方法调用

namespace PunchOut
{
    public partial class Form2 : Form
    {
         public String richText;
         public Form2(String rText)
         {    
              InitializeComponent();
              this.richTextBox1.Rtf = rText;

         }

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            richText = this.richTextBox1.Rtf;
        }
    }
}
然后在按钮4中单击。使用Rtf包含代码,否则只需使用普通文本框即可

现在,在按钮单击事件处理程序中,我们创建一个新表单并将其分配给变量。然后我们调用showdialog。showdialog的原因是,这将使表单成为最顶层的表单,因此用户无法返回punchout表单并更改richtextbox,这将使Form2中的文本过时,因为它不再代表punchout表单中正确的RTF文本。当用户编辑完文本并关闭表单后,我们通过访问Form2的richText成员变量来请求已编辑的rtf文本。在窗体关闭后可以访问此项的原因是,在方法返回之前,不会释放窗体,因为局部变量位于该方法的范围内

public void button4_Click(object sender, EventArgs e)
{              
    Form2 f2 = new Form2(richTextBox1.Rtf);
    f2.ShowDialog();
    richTextBox1.Rtf= f2.richText;
 } 

嗯,我仍然得到一个错误,即“非静态字段、方法或属性'PunchOut.Form2.richTextBox1'需要对象引用”是否使用了新的变量名?因为我也忘了。它已更新。抱歉,我不匹配变量,我将新的punchOut添加到错误的一侧。它现在应该可以工作了。它现在似乎可以在form2上工作,但是我仍然得到这样一个结果:错误1无法将类型“System.Windows.Forms.Form”隐式转换为“PunchOut.PunchOut”。存在显式转换(您是否缺少转换?)啊哈!在按钮4中,单击“放置此项:'Form2 Form2=new Form2(此);”form2.Show();“”richTextBox1.Text=form2.richTextBox1.Text;'在使用变量之前,您需要将Form2分配给变量,因为它不是“静态的”,您需要创建一个新实例。所发生的事情是:您创建了一个新的Form2并显示了它,但是它没有分配给变量。然后,您尝试单独调用Form2,除非该类是静态的或您创建了一个新实例,否则您无法这样做。我希望我解释得足够好。抱歉,5分钟后无法编辑。我无意中按了enter键以获得一个newlineHmm,我仍然得到一个错误,即“非静态字段、方法或属性'PunchOut.Form2.richTextBox1'需要对象引用”是否使用了新的变量名?因为我也忘了。已经更新了,对不起,