2014-02-11 4 views
0

저는 1 주일 동안이 문제에 어려움을 겪었으므로 그것에 대해 다른 질문은 없습니다. Accessing Forms data from another form과 같은 것을해야하지만 두 번째 폼의 첫 번째 폼의 코드에있는 변수에 액세스해야하며 두 번째 폼에서 click 이벤트가 발생해야합니다. 또한두 양식을 사용하여 첫 번째 양식에서 변수에 액세스하십시오.

namespace Sudoku 
{ 
    public partial class difficultyForm : Form 
    { 
     string difficulty = ""; 

     public difficultyForm() 
     { 
      InitializeComponent(); 
     } 

     private void enterButton_Click(object sender, EventArgs e) 
     { 
      difficulty = difficultyTextBox.Text; 

      if (difficulty != "1" && difficulty != "2" && difficulty != "3" && difficulty != "4" && difficulty != "5") 
       MessageBox.Show("The difficulty must be an integer from 1 to 5.", "Difficulty Error", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); 
      else 
      { 
       this.Hide(); 
      } 

내가 C에서 # 멍청한 놈 이니 여기

namespace Sudoku 
{ 
    public partial class mainForm : Form 
    { 
     public mainForm() 
     { 
      InitializeComponent(); 
     } 
     difficultyForm difForm = new difficultyForm(); 
     public string difficulty = ""; 

     private void generateNewPuzzleMenuItem_Click(object sender, EventArgs e) 
     { 
      generateBegin(); 
     } 

     private void generateBegin() 
     { 
      difForm.Show(); 
      difForm.difficultyTextBox.Text = ""; 
      difForm.difficultyTextBox.Focus(); 

그리고 두 번째 양식의 (difficultyForm의) 코드의 일부는 다음과 같습니다

는 첫 번째 양식의 (mainForm의) 코드의 일부입니다 그래서 당신이 위대한 될 다른 팁 있다면, 고마워.

참고 : 코드에서 더 아래쪽에 있기 때문에 문자열을 사용하고 있습니다. 따라서 정수를 사용하지 말아주세요. 감사합니다.

+0

변수의 값을 첫 번째 형식으로 가져 오거나 설정 하시겠습니까? – Servy

+0

[다른 양식의 양식 데이터 액세스] 가능한 복제본 (http://stackoverflow.com/questions/21577732/accessing-forms-data-from-another-form) – Joe

+0

기본 양식의 텍스트를 공백으로 표시해서는 안됩니다. 다른 양식 또는 텍스트 상자의 포커스 설정. 그러한 것들은 두 번째 형태로 이루어져야합니다. 텍스트 상자는 공개적으로 노출되지 않아야합니다. – Servy

답변

0

두 번째 양식의 정보를 기본 양식으로 푸시하려면 이벤트를 사용해야합니다. 두 번째 형태의 이벤트를 만들고 그것을 발사하여 버튼을 클릭 할 때 : 당신의 생성자 PARAM에서 Form1을 통과 할 수

private void generateBegin() 
{ 
    difForm.Show(); 
    difForm.difficultyTextBox.Text = ""; 
    difForm.difficultyTextBox.Focus(); 
    difForm.DifficultySubmitted += newDifficulty => difficulty = newDifficulty; 
} 
+0

나는 이것을 시도했지만 어려움 (첫 번째 형태)은 내가 두 번째 형식에 입력 한 어려움으로 설정되지 않은 것처럼 보였다. 난 어려움의 가치를 첫 번째 양식의 텍스트 상자에 지정했고 텍스트 상자에는 아무것도 표시되지 않았습니다. – Toje

+0

@Toje 난이도를 제출할 때 발생하는 이벤트 처리기에서 설정 했습니까? 그것은 그렇게 할 수있는 적절한 장소 일 것입니다. – Servy

+0

들어오는 멍청한 질문에 대해 유감 스럽지만 이벤트 처리기는 무엇입니까? – Toje

0

난이도를 제대로 이해하면 이벤트 처리를 살펴볼 수 있습니다.

맞춤 이벤트 args 클래스를 정의하십시오 (예 : DifficultyEventArgs 또는 기타).

은 관찰하고자하는 속성의 setter 메소드에서 대리자를 호출 .. 클래스에서 대리자와 이벤트를 선언 이벤트 인수

하나 PARAM으로 대리자를 정의합니다.

다른 양식에서는이 이벤트에 가입하여 변경 사항을 모니터링 할 수 있습니다. 이것은 단지 한 가지 방법 일뿐입니다.

또한 문자열 대신 DifficultyLevel에 열거 형을 사용하는 것이 좋습니다.

0

:

public partial class difficultyForm : Form 
{ 
    string difficulty = ""; 

    public difficultyForm() 
    { 
     InitializeComponent(); 
    } 

    public event Action<string> DifficultySubmitted; 

    private void enterButton_Click(object sender, EventArgs e) 
    { 
     difficulty = difficultyTextBox.Text; 

     if (DifficultySubmitted != null) 
      DifficultySubmitted(difficulty); 

     //... 
    } 
} 

그런 다음 기본 폼에 해당 이벤트에 가입 DificultForm을 사용하여 Form1의 컨트롤에 액세스하십시오.

0

두 번째 양식의 TextBox 값을 특정 순환계로 가져 오기만하면 두 번째 양식의 코드

으로 공용 메서드를 만들 수 있습니다
public string GetTxtBoxValue() 
     { 
      return difficultyTextBox.Text; 
     } 

다음 첫 번째 양식에서 호출하십시오.

그러나 더 나은 제어권을 원한다면 이벤트를 사용하는 것이 좋습니다.

관련 문제