동일한 부모로 다른 이벤트 핸들러를 처리하는 방법은 무엇입니까?

라미네이트

다음 프로그램은 실제로 내 프로젝트가 아니지만 나중에 실제 프로그램에서 원하는 것을 더 쉽게 이해할 수 있습니다.

현재 기능을 볼 수있는 .gif는 다음과 같습니다.

내가 원하는 게 뭐야? 레이블 총점을 추가하고 싶습니다. 체크 박스와 텍스트 박스의 포인트를 포함하는 이것은 또한 실시간으로 계산되어야합니다. 각 그룹 (패널)

어디에 문제가 있습니까? 두 개의 다른 이벤트 핸들러로 작업하고 있기 때문에 이것을 관리하는 방법을 모릅니다.

다음은 출처입니다.

namespace Test1
{
    public partial class Form1 : Form
    {
        int chkBoxX = 10;
        int chkBoxY = 30;
        int txtBoxX = 10;
        int txtBoxY = 50;
        int panelX = 0;
        int panelY = 0;


        public Form1()
        {
            InitializeComponent();

            for (int k = 1; k <= 3; k++)
            {

                Panel panel = new Panel();
                panel.Width = 550;
                panel.Height = 100;
                panel.Location = new Point(panelX, panelY);
                panel.BackColor = Color.RoyalBlue;


                panelY += 110;

                 this.Controls.Add(panel);
                  AddElements(panel);

            }                                          

        }

        void AddElements(Panel panel) {

            Label labelChkBoxPoints = new Label();
            labelChkBoxPoints.Name = "labelChkBoxPoints";
            labelChkBoxPoints.Location = new Point(400, 30);
            labelChkBoxPoints.AutoSize = true;
            labelChkBoxPoints.BackColor = Color.White;
            labelChkBoxPoints.Font = new Font(labelChkBoxPoints.Font.FontFamily, 12, FontStyle.Bold);

            panel.Controls.Add(labelChkBoxPoints);

            Label labelTxtBoxPoints = new Label();
            labelTxtBoxPoints.Name = "labelTxtBoxPoints";
            labelTxtBoxPoints.Location = new Point(400, 50);
            labelTxtBoxPoints.AutoSize = true;
            labelTxtBoxPoints.BackColor = Color.White;
            labelTxtBoxPoints.Font = new Font(labelChkBoxPoints.Font.FontFamily, 12, FontStyle.Bold);

            panel.Controls.Add(labelTxtBoxPoints);

            Label labeltotalPoints = new Label();
            labeltotalPoints.Location = new Point(430, 40);
            labeltotalPoints.Font = new Font(labeltotalPoints.Font.FontFamily, 14, FontStyle.Bold);
      //      labeltotalPoints.Text = "10XXXXXXXXXXXX0";
            labeltotalPoints.AutoSize = true;
            labeltotalPoints.BackColor = Color.White;
                    //   labeltotalPoints.;
            panel.Controls.Add(labeltotalPoints);

            for (int i = 1; i <= 5; i++)
            {
                CheckBox checkBox = new CheckBox();
                checkBox.Name = String.Format("checkBox{0}", i);
                checkBox.Text = "";
                checkBox.Width = 20;
                checkBox.Height = 15;
                checkBox.Location = new Point(chkBoxX, chkBoxY);
                chkBoxX += 26;

                checkBox.CheckedChanged += checkBox_CheckedChanged;

                panel.Controls.Add(checkBox);

            }

            for (int j = 1; j <= 5; j++)
            {
                TextBox tb = new TextBox();
                tb.Name = String.Format("textBox{0}", j);
                tb.Width = 60;
                tb.Location = new Point(txtBoxX, txtBoxY);
                txtBoxX += 80;
                tb.TextChanged += txtBox_CheckedChanged;
                panel.Controls.Add(tb);
            }

            chkBoxX -= (5 * 26);
            txtBoxX -= (5 * 80);

        }

        private void txtBox_CheckedChanged(object sender, EventArgs e)
        {

            int total = 0; int points = 0; 

            foreach (object tb in ((TextBox)sender).Parent.Controls)
            {

                if (tb is TextBox)
                {
                    if (!string.IsNullOrEmpty(((TextBox)tb).Text))
                    {
                        if (!int.TryParse(((TextBox)tb).Text, out points))
                        {
                            ((TextBox)tb).Text = "";
                        }

                            total += points;
                    }
                }
            }

            (((TextBox)sender).Parent.Controls["labelTxtBoxPoints"]).Text = Convert.ToString(total);



        }

        private void checkBox_CheckedChanged(object sender, EventArgs e)
        {

            int counter = 0;

            foreach (object cb in ((CheckBox)sender).Parent.Controls)
            {
                if (cb is CheckBox)
                {
                    if (((CheckBox)cb).Checked)
                    {
                        counter++;
                    }
                }

            }

            (((CheckBox)sender).Parent.Controls["labelChkBoxPoints"]).Text = Convert.ToString(counter);

        }
    }
}
조지 보보스

두 이벤트가 끝날 때 "포인트"레이블의 합계를 계산하지 않는 이유는 무엇입니까?
멋지고 간단합니다 (더 효율적으로 할 수 있지만 이유가 없습니다 ...)
checkBox_CheckedChanged, txtBox_CheckedChanged 끝에서 TotalPoints ()를 호출하면됩니다.

int TotalPoints()
{
        int total = (from i in GetControlsWithPoint(this)
                     where i.Text != null && i.Text != string.Empty
                     select Convert.ToInt32(i.Text)).Sum();
       // MessageBox.Show("total" + total);
        return total;
}

List<Control> GetControlsWithPoint(Control parent)
{
        List<Control> results = new List<Control>();
        if (parent == null)
            return results;

        foreach (Control item in parent.Controls)
        {
            if (item.Name == "labelChkBoxPoints" || item.Name == "labelTxtBoxPoints")
                results.Add(item);
            results.AddRange(GetControlsWithPoint(item));
        }

        return results;

 }

최신 정보

패널 당 합계 만 원하는 경우 패널 내에서만 검색하도록 TotalPoint 메서드를 변경하기 만하면됩니다.

 int TotalPoints(Panel p)
 {
        int total = (from i in GetControlsWithPoint(p) where i.Text != null && i.Text != string.Empty select Convert.ToInt32(i.Text)).Sum();
       // MessageBox.Show("total" + total);
        return total;
  }

그리고 이벤트가 끝날 때

Panel p = (((Control)sender).Parent) as Panel;
TotalPoints(p);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다른 자바 스크립트 파일에서 반응 핸들러를 수동으로 호출하는 방법은 무엇입니까?

분류에서Dev

MVVM에서 이벤트를 처리하는 동안 이벤트 핸들러의 두 번째 매개 변수를 보내는 방법은 무엇입니까?

분류에서Dev

모든 이벤트 핸들러를 동적으로 바인딩 해제하고 무언가를 한 후 다시 바인딩하는 방법은 무엇입니까?

분류에서Dev

자동으로 삽입 된 양식 이벤트 핸들러가 생성 된 방법에 따라 다른 이유는 무엇입니까?

분류에서Dev

Android에서 동적으로 생성 된 뷰를 만들 때 이벤트 핸들러를 추가하는 방법은 무엇입니까?

분류에서Dev

DOM 이벤트 핸들러를 재정의하는 올바른 방법은 무엇입니까?

분류에서Dev

이벤트 핸들러를 하나로 사용하는 방법은 무엇입니까? 파이썬

분류에서Dev

하나의 핸들러에서 여러 변경 이벤트를 처리하는 방법은 무엇입니까?

분류에서Dev

람다 함수없이 React Native에서 단일 핸들러로 몇 개의 TextInput을 처리하는 방법은 무엇입니까?

분류에서Dev

이벤트 핸들러를 요소 클래스 메소드로 정의하는 방법은 무엇입니까?

분류에서Dev

Button onClick 이벤트 핸들러를 선언적으로 설정하는 방법은 무엇입니까?

분류에서Dev

모바일 용 Angular에서 긴 클릭 이벤트를 처리하는 방법은 무엇입니까?

분류에서Dev

데이터 값을 변경 한 후 핸들러를 다시 시작하는 방법은 무엇입니까?

분류에서Dev

WPF, C #에서 이벤트 처리기를 자동으로 생성하는 방법은 무엇입니까?

분류에서Dev

동일한 프로젝트에서 여러 다른 항목을 실행하는 방법은 무엇입니까?

분류에서Dev

올바른 아키텍처로 FFTW 라이브러리를 컴파일하는 방법은 무엇입니까?

분류에서Dev

리소스의 일부 작업이 한 컨트롤러로 이동하고 일부는 다른 컨트롤러로 이동하도록 Rails 경로를 올바르게 정의하는 방법은 무엇입니까?

분류에서Dev

이벤트에 DOM 요소를 생성 한 다음 DOM 요소가 존재할 때까지 이벤트 핸들러가 트리거되는 것을 방지하는 방법은 무엇입니까?

분류에서Dev

작업 관리자 또는 다른 방법으로 Windows 팝업 상자 이벤트를 캡처하는 방법은 무엇입니까?

분류에서Dev

웹앱으로 이벤트를 처리하는 방법은 무엇입니까?

분류에서Dev

@Directive로 클릭 이벤트를 처리하는 방법은 무엇입니까?

분류에서Dev

다른 데이터 유형으로 동일한 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

React JS의 다른 입력에 하나의 이벤트 핸들러를 연결하는 방법은 무엇입니까?

분류에서Dev

이벤트를 최상위 부모 React 스타일로 버블 링하는 방법은 무엇입니까?

분류에서Dev

한 컨트롤러에서 서비스로 데이터를 전달하고 동일한 이벤트에서 다른 컨트롤러의 해당 데이터에 액세스하는 방법은 무엇입니까?

분류에서Dev

PyQT로 슬라이더 핸들러를 따르기위한 팁을 만드는 방법은 무엇입니까?

분류에서Dev

하위 디렉터리를 동일한 디렉터리 내의 다른 하위 디렉터리로 이동하는 방법은 무엇입니까?

분류에서Dev

모든 OnClick 이벤트를 처리하기 위해 부모 뷰를 만드는 방법은 무엇입니까?

분류에서Dev

React-js에서 캡처 단계에 대한 이벤트 핸들러를 등록하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    다른 자바 스크립트 파일에서 반응 핸들러를 수동으로 호출하는 방법은 무엇입니까?

  2. 2

    MVVM에서 이벤트를 처리하는 동안 이벤트 핸들러의 두 번째 매개 변수를 보내는 방법은 무엇입니까?

  3. 3

    모든 이벤트 핸들러를 동적으로 바인딩 해제하고 무언가를 한 후 다시 바인딩하는 방법은 무엇입니까?

  4. 4

    자동으로 삽입 된 양식 이벤트 핸들러가 생성 된 방법에 따라 다른 이유는 무엇입니까?

  5. 5

    Android에서 동적으로 생성 된 뷰를 만들 때 이벤트 핸들러를 추가하는 방법은 무엇입니까?

  6. 6

    DOM 이벤트 핸들러를 재정의하는 올바른 방법은 무엇입니까?

  7. 7

    이벤트 핸들러를 하나로 사용하는 방법은 무엇입니까? 파이썬

  8. 8

    하나의 핸들러에서 여러 변경 이벤트를 처리하는 방법은 무엇입니까?

  9. 9

    람다 함수없이 React Native에서 단일 핸들러로 몇 개의 TextInput을 처리하는 방법은 무엇입니까?

  10. 10

    이벤트 핸들러를 요소 클래스 메소드로 정의하는 방법은 무엇입니까?

  11. 11

    Button onClick 이벤트 핸들러를 선언적으로 설정하는 방법은 무엇입니까?

  12. 12

    모바일 용 Angular에서 긴 클릭 이벤트를 처리하는 방법은 무엇입니까?

  13. 13

    데이터 값을 변경 한 후 핸들러를 다시 시작하는 방법은 무엇입니까?

  14. 14

    WPF, C #에서 이벤트 처리기를 자동으로 생성하는 방법은 무엇입니까?

  15. 15

    동일한 프로젝트에서 여러 다른 항목을 실행하는 방법은 무엇입니까?

  16. 16

    올바른 아키텍처로 FFTW 라이브러리를 컴파일하는 방법은 무엇입니까?

  17. 17

    리소스의 일부 작업이 한 컨트롤러로 이동하고 일부는 다른 컨트롤러로 이동하도록 Rails 경로를 올바르게 정의하는 방법은 무엇입니까?

  18. 18

    이벤트에 DOM 요소를 생성 한 다음 DOM 요소가 존재할 때까지 이벤트 핸들러가 트리거되는 것을 방지하는 방법은 무엇입니까?

  19. 19

    작업 관리자 또는 다른 방법으로 Windows 팝업 상자 이벤트를 캡처하는 방법은 무엇입니까?

  20. 20

    웹앱으로 이벤트를 처리하는 방법은 무엇입니까?

  21. 21

    @Directive로 클릭 이벤트를 처리하는 방법은 무엇입니까?

  22. 22

    다른 데이터 유형으로 동일한 함수를 호출하는 방법은 무엇입니까?

  23. 23

    React JS의 다른 입력에 하나의 이벤트 핸들러를 연결하는 방법은 무엇입니까?

  24. 24

    이벤트를 최상위 부모 React 스타일로 버블 링하는 방법은 무엇입니까?

  25. 25

    한 컨트롤러에서 서비스로 데이터를 전달하고 동일한 이벤트에서 다른 컨트롤러의 해당 데이터에 액세스하는 방법은 무엇입니까?

  26. 26

    PyQT로 슬라이더 핸들러를 따르기위한 팁을 만드는 방법은 무엇입니까?

  27. 27

    하위 디렉터리를 동일한 디렉터리 내의 다른 하위 디렉터리로 이동하는 방법은 무엇입니까?

  28. 28

    모든 OnClick 이벤트를 처리하기 위해 부모 뷰를 만드는 방법은 무엇입니까?

  29. 29

    React-js에서 캡처 단계에 대한 이벤트 핸들러를 등록하는 방법은 무엇입니까?

뜨겁다태그

보관