วิธีการเปลี่ยนแปลง dynamically สร้างป้ายข้อความบน dynamically สร้างปุ่มคลิกใน C#งหน้าต่างแบบฟอร์มโปรแกรม

0

คำถาม

ฉันพยายามที่จะสร้างบางอย่าป้ายและปุ่ม dynamically. ฉันอยากจะเปลี่ยนป้ายชื่อขอบ dynamically 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"มาเป็นข้อตกลง(หากมันเป็นคนที่สองไปของเล่น)..แต่ realistically เพราะคุณรู้ว่าผู้ส่งบอกคุณได้รูปแบบอะไร:

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

ฉันแค่อบคุณครับท่านลอร์ดคนผู้ส่งแต่การเป็นประโยชน์ถ้ามีบางสิ่งบางอย่างอื่นเปลี่ยนแปลงส่วนติดต่อผู้ใช้ของระหว่างคุณการตั้งค่าขึ้นและผู้ใช้การคลิกที่ปุ่ม-สำหรับตัวอย่างเช่นถ้าพวกเขาวิ่งกระบวนการนั่น alters ปุ่มป้ายกำกับแล้วแน่นอนใช้ผู้ส่งบอกล่าสุดคุณค่า

2021-11-22 09:58:54

มันได้ผล แต่ในโครงการหลักฉันไปแล้วเคยเป็นผู้ส่งนั่นคือเหตุผลว่าทำไมมันเป็นการแสดงข้อผิดพลาด และยังฉันต้องดูเงื่อนไขก่อนที่การเปลี่ยนป้ายข้อความ ดังนั้นคุณสามารถแนะนำทางดังนั้นฉันสามารถเข้าถึบป้ายหรือการควบคุมจากการคลิกวิธีการ?
jerin sifat

ฉันต้องการดูตัวอย่างของสิ่งที่คุณต้องการจะทำ;รายละเอียดอยู่สักหน่อยเบี่ยงเบน. ฉันจะทำการแก้ไขเหรอเบนมีใบคำให้การปต้องแสดงว่าคุณจะทำหลายเส้นวิธีนะแต่ว่ามีบางอย่างที่เจาะจงกว่าเส้นทางอะไรช่วยคุณต้องการจะเป็นประโยชน์
Caius Jard
0

คุณสามารถรักษาความพจนานุกรมของปุ่มจะป้ายต่างๆและใช้มันเพื่อค้นหาที่ตรงกับแถบข้อความกำกับ ทางเลือกอื่นให้เลือกจะเป็นเพื่อนร่วมงานเป็นดัชนีกับทั้งสองปุ่มและป้ายชื่อแล้วเจอที่ป้ายชื่อกับเรื่องนั้น

ฉันจะ illustrate ในพจนานุกรมตัวเลือกนี้เพื่อคุณ

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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่