2012-08-22 91 views
1

我在製作時鐘以獲取樂趣並學習C#。將數據從form1.richTextBox複製到form2.richTextbox

我有時間了,開始,停止,清除。

但是我遇到了「註釋」部分的問題。理想情況下,我希望能夠將筆記寫入字段,並具有「編輯」按鈕以允許用戶打開窗口以獲得更多與文本編輯有關的選項。 (與從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」

爲什麼我得到這些錯誤?

回答

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

Hi @Sorceri嗨@Sorceri,更新你的答案可能很有價值,可以解釋爲什麼你改變了'Form2',所以它不需要知道'PunchOut' - 提問者很難理解你分離的優點方法沒有更多的解釋。 –

+0

@@ Thegluestickman - 你是對的,我確實刪除了原本不應該存在的東西......你應該選擇的東西。 – Sorceri

+0

當我使用這種方法時,我得到這個錯誤'不能隱式轉換類型'System.Windows.Forms.DialogResult'到'PunchOut.Form2'\t' –

0

您沒有在Form2中對PunchOut進行新的引用。與

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; 

} 

編輯:你應該通過在你的窗體2添加這個類聲明下:

PunchOut punchOut; 

你在窗體2獲得舊的PunchOut而不是創建一個新的。我更新了代碼。

您可以將文本存儲在更易於訪問的字符串中。然後讓你的其他表單調用該字符串。

public string yourText; 

// down further 

yourText = textBox1.Text; 
+0

嗯,我仍然得到的是「對象引用需要非靜態字段,方法或屬性‘PunchOut.Form2.richTextBox1’」 –

+0

是否使用了新的變量名的錯誤?因爲我也忘了。它已更新。 – Thegluestickman

+0

對不起,我與變量不匹配,我將新的punchOut添加到錯誤的一面。它現在應該工作。 – Thegluestickman