2014-07-07 2 views
0

내 Windows 양식 응용 프로그램에서 두 양식을 추가했습니다 : Form1Form2. Form1에 버튼이 있고 Form2에 richtextbox가 있습니다. Form1의 버튼을 클릭하면 Form2이 표시되고 파일 대화 상자가 표시됩니다.두 번째 양식의 richtextbox에 액세스

이제 rich textbox에 파일의 텍스트를로드하고 싶습니다. 문제는 코드에서 richtextbox에 액세스하는 방법입니까?

public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog openFileDialog1 = new OpenFileDialog(); 
     openFileDialog1.Filter = "txt files (*.txt)|*.txt"; 
     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      try 
      { 
       this.Hide(); 
       Form Form2 = new Form(); 
       Form2.Show(); 
       // load a text file to rich text box. How to access the rich text box here? 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); 
      } 
     } 

    } 

UPDATE :

나는 형식 2의 인스턴스를 만들고 생성자에 문자열을 전달하려했지만 그것은 작동하지 않습니다. image

public partial class Form2 : Form 
{ 
    public Form2(string text) 
    { 
     InitializeComponent(); 
     richTextBox1.Text = text; 
    } 
} 

답변

2

그냥 (당신이 새 생성자를 수정하거나 추가해야합니다) Form2를 생성자를 통해 텍스트를 전달합니다

public Form2(string text) 
{ 
    InitializeComponent(); 
    richtextbox.Text = text; 
} 

나쁜 :

여기
string text = File.ReadAllText(openFileDialog1.FileName); 
Form2 form2 = new Form2(text); 
form2.Show(); 

는 생성자처럼 보이는 방법이다 솔루션 : 단순히 디자이너에서 richtextbox를 선택하고 Modifiers 속성을 public으로 변경하십시오. 폼의 캡슐화를 중단하지만 Form2 클래스 외부에서 컨트롤에 액세스 할 수 있습니다.

+0

System.Windows .Forms.Form ' 1 인자를받는 생성자를 포함하지 않습니다. –

+0

@Love 그래서 생성자 코드를 게시했습니다. 수정해야합니다. –

+0

.net 프레임 워크에서는 지원하지 않습니다. 생성자는 윈도우 폼을 제외하고 일반 클래스에서 작동합니다. –

0

또는 Form2에서 richtextbox를 공용으로 선언하거나 데이터를로드하기위한 공용 속성을 선언하고 Form1에서 직접 액세스 할 수도 있습니다.

[업데이트 됨]

내가 잘못 설명했을 수 있습니다. 나는 단지 폼이 아니라 richtextbox를 public으로 만들었다.

enter image description here

그리고 컨트롤에 그 바로 접속 후 원하는로드 :

Form2 objForm2 = new Form2(); 

     //Open file, etc... 

     objForm2.richTextBoxForm2.Text = "XXXX"; 
     objForm2.Show(); 
     objForm2.BringToFront(); 
+0

코드 'Form2'는 이미 공개되어 있습니다. –

0

을 Form1에

을 Form2에서
namespace WindowsFormsApplication7 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     this.Hide(); 
     Form2 form2 = new Form2(); 
     form2.Show(); 
    } 
    } 
} 

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

    private void Form2_Load(object sender, EventArgs e) 
    { 
     OpenFileDialog openFileDialog1 = new OpenFileDialog(); 
     openFileDialog1.Filter = "txt files (*.txt)|*.txt"; 
     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      string text = File.ReadAllText(openFileDialog1.FileName); 
      richTextBox1.Text = text; 
     } 
    } 
    } 
} 
관련 문제