c# - 如何访问某个按钮以更改某个文本字段的值(在动态创建的控件中)
问题描述
我需要使用一个按钮来制作一些带有相关按钮的文本框,每个按钮都会将 1 添加到文本框(我想与它如何关联?)
我有一个带有 button1 和三个面板的窗体
===========================================
using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace AdvancedCounter
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
if (panel3.Controls != null)
{
var btn = panel3.Controls.Find("_B", true).First();
btn.Click += new EventHandler(Btn_Click);
}
}
int a = 0;
int counter=0;
private void button1_Click(object sender, EventArgs e)
{
counter++;
Button btn = new Button();
btn.Location = new Point(0, 100);
btn.Text = "ADD";
btn.Name ="_B";
btn.Dock = DockStyle.Left;
btn.Click += new EventHandler(Btn_Click);
TextBox txt = new TextBox();
txt.Name = "_T";
txt.Location = new Point(500, 100);
txt.Dock = DockStyle.Left;
txt.Text = a.ToString();
panel3.Controls.Add(txt);
panel3.Controls.Add(btn);
foreach (var item in panel3.Controls.Find("_B", true))
{
item.Text = "ass";
}
}
private void Btn_Click(object sender, EventArgs e)
{
// MessageBox.Show(sender.ToString());
// throw new NotImplementedException();
var txtbx= panel3.Controls.Find("_T", true).First();
var btnbx = panel3.Controls.Find("_B", true).First();
a++;
// find[1].Dispose();
txtbx.Text = a.ToString();
}
}
}
解决方案
首先,您为每个 TextBox 和 Button 提供相同的 Name 属性,您不应该这样做。而是这样做,例如:
btn.Name = "_B_"+ counter;
所以你会有不同的按钮和文本框名称。在事件处理程序中:
private void Btn_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
string index = btn.Name.Split('_')[2];
string tbName = "_T_" + index;
var txtbx= panel3.Controls.Find(tbName, true).First();
a++;
txtbx.Text = a.ToString();
}
推荐阅读
- java - 是否可以在 Hashmap 中获取先前存储的值?
- javascript - 如何使用正则表达式返回查询参数?
- c# - 如何将使用半列拆分数据的文本文件解析为数据表
- angular - 失败 [object ErrorEvent] - Angular 6
- rust - C# like verbatim string in Rust?
- jquery - 如何限制从浏览器控制台窗口访问 jquery ajax 方法
- c# - 在 C# ASP.NET Web 窗体中为用户分配角色
- android - Buildozer 在构建用于 android 发布的 Kivy 框架的 Pong 应用程序时出错
- c# - 如何降低docfx冗长?
- android - 如何通过工作链观察工作管理器中的实时数据?