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