>

Visual Studio의 여러 함수에서 변수를 사용하고 싶습니다.비공개 button1_Click에 대한 레이블로 표시되는 데value_1을 가져 오려고합니다.

이 방법으로 시도하면 다음과 같은 오류 메시지가 나타납니다.

'Black1_CheckedChanged'는 대리자 'EventHandler'와 일치합니다

내가 무엇을 놓치고 있습니까? 정말 도움을 주셔서 감사합니다. 감사합니다.

public partial class Form1 : Form
{
    int value_1 = 20;
    int value_2 = 20;
    int value_3 = 20;
    public Form1()
    {
        InitializeComponent();
    }
    // Groupe Colour 1
    private void Black1_CheckedChanged(object sender, EventArgs e, int value_1)
    {
        colour1.BackColor = System.Drawing.Color.Black;
        groupBox1.BackColor = System.Drawing.Color.Black;
        value_1 = 0;
    }
    private void Brown1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Brown;
        groupBox1.BackColor = System.Drawing.Color.Brown;
        value_1 = 1;
    }
    private void Red1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Red;
        groupBox1.BackColor = System.Drawing.Color.Red;
        value_1 = 2;
    }
    private void Orange1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Orange;
        groupBox1.BackColor = System.Drawing.Color.Orange;
        value_1 = 3;
    }
    private void Yellow1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Yellow;
        groupBox1.BackColor = System.Drawing.Color.Yellow;
        value_1 = 4;
    }
    private void Green1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Green;
        groupBox1.BackColor = System.Drawing.Color.Green;
        value_1 = 5;
    }
    private void Blue1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Blue;
        groupBox1.BackColor = System.Drawing.Color.Blue;
        value_1 = 6;
    }
    private void Purple1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Purple;
        groupBox1.BackColor = System.Drawing.Color.Purple;
        value_1 = 7;
    }
    private void Grey1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Gray;
        groupBox1.BackColor = System.Drawing.Color.Gray;
        value_1 = 8;
    }
    private void White1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.White;
        groupBox1.BackColor = System.Drawing.Color.White;
        value_1 = 9;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        value_1 = int.Parse(label_total.Text);
    }
}


  • 답변 # 1

    Black1.CheckedChanged   object 인수를 사용하여 특정 서명 방법을 예상합니다.  그리고 EventArgs ). Black1_CheckedChanged 의 매개 변수 수  기능이 변경되었습니다. 두 개의 매개 변수보다 많은 매개 변수를 사용하면 함수를 호출하면 세 번째 매개 변수 int value_1 의 값을 찾지 못합니다.  그 오류가 발생합니다. 그래서 오류가 발생합니다.

    와이즈 비즈 와이즈 비즈      

    이것에 대해 :

    To solve that, you must change this part of your code:

    
      
      

    또는이 답변에서 볼 수 있듯이 람다를 사용할 수 있습니다   이벤트 핸들러에 대한 어댑터로 표현하고 현재를 사용할 수 있습니다   변화없는 기능 :

    private void Black1_CheckedChanged(object sender, EventArgs e, int value_1)
    {
        colour1.BackColor = System.Drawing.Color.Black;
        groupBox1.BackColor = System.Drawing.Color.Black;
        value_1 = 0;
    }
    
    
         

    이전 솔루션에서 코드는 다음과 같습니다.

    private void Black1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Black;
        groupBox1.BackColor = System.Drawing.Color.Black;
        value_1 = 0;
    }
    
    

    간단한 방법으로 새 ​​매개 변수를 전달해야하는 경우 클래스 범위 (클래스 특성)의 다른 변수를 사용하여 필요한 값을 저장하는 것과 같이 다른 방법으로 값을 전달할 수 있습니다.

    와이즈 비즈 와이즈 비즈
    Black_1.CheckedChanged += new CheckedChanged((sender, e) => Black1_CheckedChanged(sender, e, value_1));

관련 자료

  • 이전 전 세계 WebGL 병렬 처리의 예
  • 다음 angular - 헤드리스 크롬을 비활성화하고 터미널 만 사용하는 카르마 구성