을 변경하는 방법을 동적으로 만들어진 레이블 텍스트에서 동적으로 만들어 버튼을 클릭에서는 C#Windows Forms 응용 프로그램

0

질문

을 만들려고 일부 레이블과 버튼합니다. 변경하고자 하는 상표의 이름에서 동적으로 crated 버튼을 클릭합니다. 내가 쓰 button_click 방법에 액세스 할 수 없습니다 라벨 객체를 직접 있습니다. 렇게 하려면 어떻게 해야 합니까?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DemoPanel
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            int lblYVal = 10;
            int btnYVal = 50;

            for(int i = 1; i< 5; i++)
            {
                Label lbl = new Label();
                lbl.Text = "test";
                lbl.Name = "test"+i.ToString();
                lbl.Location = new System.Drawing.Point(10, lblYVal);
                lbl.Visible = true;

                Button btn = new Button();
                btn.Text = "Click";
                btn.Name = "textBtn" + i.ToString();
                btn.Location = new System.Drawing.Point(10,btnYVal);
                btn.Visible = true;

                btn.Click += new EventHandler(this.btn_click);


                this.Controls.Add(lbl);
                this.Controls.Add(btn);
                lblYVal += 70;
                btnYVal += 70;
                

            }

        }

        void btn_click(object sender, EventArgs e)
        {
            //How can i change label text from here.
            //lbl.text //Does Not exist Error.
            Label lbl = new Label();
            lbl.Text = "New text"; //Not changing Label text
        }
    }
}
c# desktop-application
2021-11-22 06:03:37
2

최고의 응답

1

for 루프를 작성에 대해 알고 있는 버튼과 레이블이 있습니다. 을 활용할 수 있습니다 이것을 쓰기를 클릭하 핸들러를 캡처합니다. 그것은 간단으로 바꾸:

btn.Click += new EventHandler(this.btn_click);

하기

btn.Click += (sender, args) => lbl.Text = "Clicked";

그것은 필요가 없다 그래서 짧습니다. 할 수 있습니다,예를 들어오:

btn.Click += (sender, args) => {
  if(something > 0)
    lbl.Text = "Did the process because something was > 0";
  else
    lbl.Text = "Can't start the process because something is 0";
}

이 있는 경우는 방법"은 재료"

void DoTheProcessAndOutputToTheLabel(Label x){
  int i = 0;
  foreach(var thing in things){
    bool success = ProcessTheThing(thing);
    if(success)
      i++;
  }
  x.Text = $"Processed {i} things";
}

btn.Click += (sender, args) => DoTheProcessAndOutputToTheLabel(lbl);

지 확인,귀하의 코멘트에 당신이 말한"사용자"그러나 여기에는 이벤트 처리기만 연결하는 하나의 버튼 그래서 당신은 정말 필요 없어 아무것도 할 것으로 보낸 사람이기 때문에 그것은 명백하는지를 보낸 사람입니다. 예를 들어 있을 수 있습:

btn.Tag = "hello"+i;
btn.Click += (sender, args) => DoTheProcessAndOutputToTheLabel(lbl, (sender as Control).Tag);

을 보낼 수 있어"hello2"에서 인수로(의 경우 두 번째로 갈 루프의)..그러나 현실적으로 알고 있기 때문에 보낸 사람에 당신을 형성할 수 있었 아무것도:

var x = "hello"+i;
btn.Click += (sender, args) => DoTheProcessAndOutputToTheLabel(lbl, x);

나만을 예측하는 것이 보낸 사람만 유용한 것으면 뭔가 다른 변경을 사용하면서도 사용자를 설정하고 사용자는 버튼을 클릭하면-예를 들어 그들이 실행하는 경우 프로세스를 변경하는 버튼을 태그,다음 사용하십 보낸 사람을 잡고 최신 값

2021-11-22 09:58:54

이것은 효과가 있었습니다. 하지만 내 주요 프로젝트,이미 사용이 보낸 사람을 보여주는 오류가 있습니다. 또한 필요 조건을 변경하기 전에 레이블 텍스트입니다. 그래서 할 수 있는 방법을 제안할 수 있도록에 접근하는 라벨 또는 제어부를 클릭하니까?
jerin sifat

을 해야의 예를 참조하십시오 당신이 원하는 무엇을 할;설명이 막연하다. 나는 편집하여 게시하는 방법을 보여 당신은 하중 방법,그러나 몇 가지 더 명확한 방향에 무엇이 필요한 도움이 될 것입니다 유용
Caius Jard
0

을 유지할 수 있 사전의 버튼 레이블을 사용하는 일치하는 레이블이 있습니다. 또 다른 옵션은 것 연결하는 색인을 모두 버튼 및 라벨 레이블을 찾을 수 있습니다.

나는 설명 옵션을 사전니다.

Dictionary<Button, Label> mapping = new Dictionary<Button, Label>();

...

루프에서,

mapping[btn] = lbl;

에서 당신의 처리기

((Label)mapping[(Button)sender)]).Text = "some text";
2021-11-22 07:18:13

지 않을 유지하기 위해 필요 사전 컨트롤;컨트롤 컬렉션의 어떤 당신은 레이블을 넣어에서 당신을 위해 그것을 할 것입니다
Caius Jard

실제로,나는 결코 사용되는 사전에,그래서 내가 이해하지 못하는 어떻게 받을 수 있는 값에서 나의 처리기입니다. 내가 복사 코드고 그것은 오류가 표시됩니다에 핸들러를 매핑하지 않은 선언합니다.
jerin sifat

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................