1

我正在制作一个有趣的时钟并学习 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”需要对象引用

为什么我会收到这些错误?

4

2 回答 2

1

那里有很多不需要的工作。我希望我解释得足够好

分解:我们添加一个字符串成员变量,以便我们可以将 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;
        }
    }
}

然后在您的 button4_Click 中。使用 Rtf 包含代码,否则只需使用纯文本框

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

public void button4_Click(object sender, EventArgs e)
{              
    Form2 f2 = new Form2(richTextBox1.Rtf);
    f2.ShowDialog();
    richTextBox1.Rtf= f2.richText;
 } 
于 2012-08-22T03:03:21.963 回答
0

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

PunchOut punchOut;

然后你进入 Form2:

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;
        }
    }
}

在原来的替换 button4_CLick 为:

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

}

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

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

public string yourText;

// down further

yourText = textBox1.Text;
于 2012-08-22T02:28:21.403 回答