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の理由は、これによりフォームが最上位のフォームになり、ユーザーがパンチアウトフォームに戻ってリッチテキストボックスに変更を加えることができなくなり、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を作成するのではなく、古いPunchOutを渡す必要があります。コードを更新しました。

よりアクセスしやすい文字列にテキストを保存できます。次に、他のフォームにその文字列を呼び出させます。

public string yourText;

// down further

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