Joo*_*ooj 2 .net c# object winforms
我有一个主要表单(frmMain)
,有一些按钮(button1, button2...)
.
然后我这样做:
object objectsContainer = frmMain; // <--now the object contains form base, button1, button2...
Run Code Online (Sandbox Code Playgroud)
我怎么能循环遍历我的对象中的所有包含项目来访问butto1,button2 ...... ???
我这样做了,但这不是我想要的.
foreach (PropertyInfo pInfo in objectsContainer.GetType().GetProperties())
{
}
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情:
foreach (object objectFromForm in objectsContainer) // <--- how to do this looping an object (type of form)
{
//here is objectFromForm = base, button1, button2...
foreach (PropertyInfo pInfo in objectFromForm .GetType().GetProperties())
{
//here it's possible to access pInfo and its properties like size, name ...
}
}
Run Code Online (Sandbox Code Playgroud)
当我调试并查看objectsContainer的内容时,我想要所有"信息".
一些建议?
最好的祝福.
**
**
好的,我做了一个测试项目.在那里你可以看到我想做什么.在项目中是一个带有对象的图像......在这里你可以下载它:http: //www.mediafire.com/download.php?k5j3ejnzm2
最好的祝福.
Mar*_*ell 20
每个Control
都有一个Controls
集合,您可以迭代以获得完整的层次结构,但不幸的是ToolStrip
项目使用不同的对象模型(它们不是全部Control
); 因此,您可以迭代这样的设置(也包括菜单项),但这不是微不足道的; 这是一个例子:
IEnumerable RecurseObjects(object root) {
Queue items = new Queue();
items.Enqueue(root);
while (items.Count > 0) {
object obj = items.Dequeue();
yield return obj;
Control control = obj as Control;
if (control != null) {
// regular controls and sub-controls
foreach (Control item in control.Controls) {
items.Enqueue(item);
}
// top-level menu items
ToolStrip ts = control as ToolStrip;
if (ts != null) {
foreach(ToolStripItem tsi in ts.Items) {
items.Enqueue(tsi);
}
}
}
// child menus
ToolStripDropDownItem tsddi = obj as ToolStripDropDownItem;
if (tsddi != null && tsddi.HasDropDownItems) {
foreach (ToolStripItem item in tsddi.DropDownItems) {
items.Enqueue(item);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
你可以这样称呼,例如,通过以下方式:
foreach (object obj in RecurseObjects(this)) {
Console.WriteLine(obj);
}
Run Code Online (Sandbox Code Playgroud)
当然,问题是:你想对每件物品做什么?
Adr*_*der 13
您可以循环ControlCollection.
请记住,如果这些控件位于面板中,则可以嵌套这些控件.
private void RecusiceControls(ControlCollection controls)
{
foreach (Control control in controls)
{
RecusiceControls((ControlCollection)control.Controls);
if (control is Button)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
看看这个
归档时间: |
|
查看次数: |
3034 次 |
最近记录: |