c# - 访问 FlowLayoutPanels 的控件方法
问题描述
假设我有一个FlowLayoutPanel
被调用panel1
的 ,里面有control1
, 。每个控件都有一个方法或一个存储变量。我如何访问这些?control2
control3
.doSomething()
.name
就像是:
panel1.Controls[0].doSomething();
string name = panel1.Controls[0].name;
我的代码:
public partial class ChatItem : UserControl
{
public string username, description, mainUser; /// <summary>
/// mainUser este utilizatorul care foloseste in prezent aplicatia
/// </summary>
MySqlConnection basicConnection, chatUpdater, msgSender;
#region Properties
[Category("Custom Properties")]
public string user
{
get { return label1.Text; }
set { label1.Text = username = value; }
}
[Category("Custom Properties")]
public Image profilePicture
{
get { return pictureBox1.Image; }
set { pictureBox1.Image = value; }
}
public Image dot
{
get { return pictureBox2.Image; }
set { pictureBox2.Image = value; }
}
#endregion
public void doSomething()
{
MessageBox.Show("something");
}
}
我想访问.doSomething()
,description
我该怎么做?
解决方案
您应该遍历Controls属性,但应该将控件强制转换为您的类型以使用特定于您的类的字段/方法
foreach(var control in panel1.Controls)
{
if (control is ChatItem chatItem) // to ensure the casting can be done
{
string description= chatItem.description;
chatItem.doSomething();
}
}
推荐阅读
- java - @async 多线程中的弹簧引导循环
- heroku - 在有时部署 Web 应用程序后,Heroku 服务器上的媒体文件会被自动删除
- php - PHP远程调试卡在“等待带有IDE键'PHPSTORM'的传入连接”
- python - Flask:如何将所有变量传递给模板
- java - 无法启动 Java Flight Recorder 或附加 Java Mission Control
- symfony - Load Vue 3 Component inside mounted div and pass PHP data
- java - 阻止 WebView 加载特定的 URL
- office-js - 如何在更新后使用 Internet Explorer 11 运行 Word 加载项(Windows 10 版本 >= 1903 / Office 365 版本 >= 16.0.116291)
- angular - PrimeNG:没有 MenuModel 的简单按钮下拉菜单
- docker - 新用户帐户 - 拒绝进入 docker 的权限