如何在 C# 中为动态创建的用户控件创建点击事件?
How to create click event for dynamically created user controls in C#?
我正在创建一个 Windows 通用应用程序,其中包含一个装有用户控件的 ListView。用户控件在运行时根据数据库中的元素动态添加到 ListView。
public void ShowFavorites()
{
using (SQLite.Net.SQLiteConnection conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), (Application.Current as App).DBPath))
{
var Favorites = conn.Table<Favorites>();
lvFavorites.Items.Clear();
foreach (var fav in Favorites)
{
FavoriteItem favItem = new FavoriteItem();
favItem.Favorite = fav;
lvFavorites.Items.Add(favItem);
}
}
}
那么我如何创建一个在按下用户控件时触发的事件?
创建控件时,您需要做的只是link控件到一个新事件:
// Dynamically set the properties of the control
btn.Location = new Point((lbl.Width + cmb.Width + 17), 5);
btn.Size = new System.Drawing.Size(90, 23);
btn.Text = "Add to Table";
// Create the control
this.Controls.Add(btn);
// Link it to an Event
btn.Click += new EventHandler(btn_Click);
然后,当您(在本例中)单击新添加的按钮时,它将调用您的 btn_Click
方法:
private void btn_Click(object sender, EventArgs e)
{
//do stuff...
}
即使对于具有不同文本等的项目,我也能正常工作。
我将根据添加到面板的按钮来解释它。
您需要有一个 List<> 来存储项目,在本例中为按钮。
List<Button> BtList = new List<Button>();
在这种情况下我也有一个面板。
Panel PanelForButtons = new Panel();
这是我的代码,希望对您有所帮助:
void AddItemToPanel()
{
//Creating a new temporary item.
Button TempBt = new Button();
TempBt.Text = "Hello world!";
//Adding the button to our itemlist.
BtList.Add(TempBt);
//Adding the event to our button.
//Because the added item is always the last we use:
PanelForButtons.Controls.Add(BtList.Last());
BtList.Last().Click += MyButtonClicked;
}
这是事件:
void MyButtonClicked(object sender, EventArgs e)
{
//First we need to convert our object to a button.
Button ClickedButton = sender as Button;
//And there we have our item.
//We can change the text for example:
ClickedButton.Text = "The world says: \"Hello!\"";
}
我正在创建一个 Windows 通用应用程序,其中包含一个装有用户控件的 ListView。用户控件在运行时根据数据库中的元素动态添加到 ListView。
public void ShowFavorites()
{
using (SQLite.Net.SQLiteConnection conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), (Application.Current as App).DBPath))
{
var Favorites = conn.Table<Favorites>();
lvFavorites.Items.Clear();
foreach (var fav in Favorites)
{
FavoriteItem favItem = new FavoriteItem();
favItem.Favorite = fav;
lvFavorites.Items.Add(favItem);
}
}
}
那么我如何创建一个在按下用户控件时触发的事件?
创建控件时,您需要做的只是link控件到一个新事件:
// Dynamically set the properties of the control
btn.Location = new Point((lbl.Width + cmb.Width + 17), 5);
btn.Size = new System.Drawing.Size(90, 23);
btn.Text = "Add to Table";
// Create the control
this.Controls.Add(btn);
// Link it to an Event
btn.Click += new EventHandler(btn_Click);
然后,当您(在本例中)单击新添加的按钮时,它将调用您的 btn_Click
方法:
private void btn_Click(object sender, EventArgs e)
{
//do stuff...
}
即使对于具有不同文本等的项目,我也能正常工作。 我将根据添加到面板的按钮来解释它。 您需要有一个 List<> 来存储项目,在本例中为按钮。
List<Button> BtList = new List<Button>();
在这种情况下我也有一个面板。
Panel PanelForButtons = new Panel();
这是我的代码,希望对您有所帮助:
void AddItemToPanel()
{
//Creating a new temporary item.
Button TempBt = new Button();
TempBt.Text = "Hello world!";
//Adding the button to our itemlist.
BtList.Add(TempBt);
//Adding the event to our button.
//Because the added item is always the last we use:
PanelForButtons.Controls.Add(BtList.Last());
BtList.Last().Click += MyButtonClicked;
}
这是事件:
void MyButtonClicked(object sender, EventArgs e)
{
//First we need to convert our object to a button.
Button ClickedButton = sender as Button;
//And there we have our item.
//We can change the text for example:
ClickedButton.Text = "The world says: \"Hello!\"";
}