PDA

View Full Version : سوال: پیدا کردن کنترل های داخل فرم



prans_tork
دوشنبه 25 خرداد 1394, 18:12 عصر
با سلام

من برای طراحی یک سطح دسترسی پویا لازم دارم که تمام کنترل هایی که فیلد Tag مقداری دارن رو لیست کنم روی همه فرم ها ( روی یک فرم مخصوص این کار)

هر فرمی داخلش یک کنترل LayoutContol داره و هر LayoutControl داخلش یک LayoutControlItem و هر LayoutControlItem داخلش یک پنل و کنترل های اصلی مثل دکمه ها و تکست باکس ها داخل اونها قرار دارن. یه چیزی مثل شکل زیر:

132261

نکته: در این حالت داخل فرم فقط یک کنترل (LayoutContol ) وجود داره
داخل LayoutContol هم فقط یک کنترل (LayoutControlItem ) وجود داره و ....

حاالا با یک رابطه بازگشتی اومدم و گفتم اگر چیزی داخل کنترل بود بازم تابع پیدا کردن کنترل هارو صدا بزن.
همه چیز در ظاهر و منطقاً درسته

اما

مشکل اینه که گیر StackOverFlow Exception می افتم.
راه حلی داره؟


if (!string.Equals(f.Name, "FrmAccessControl"))
{
AddNodeForControl(treeNode, f.Controls);
}
....

private void AddNodeForControl(DevComponents.AdvTree.Node MainNode, Control.ControlCollection HasChildControl)
{
foreach (Control childItem in HasChildControl)
{
if (childItem.Controls.Count != 0)
{


AddNodeForControl(MainNode, childItem.Controls);
}


DevComponents.AdvTree.Node CHildNode;


byte CSControlD = AccessControlClass.Val<byte>(childItem.Tag);
if (CSControlD > 5)
{
string ControlText = childItem.Text;
CHildNode = new DevComponents.AdvTree.Node();
CHildNode.DragDropEnabled = false;
CHildNode.Name = childItem.Name + "Node";
if (!string.IsNullOrEmpty(childItem.Text))
{
CHildNode.Text = ControlText;
}
else
{
CHildNode.Text = childItem.Name;
}
//CHildNode.Text = ControlText;
CHildNode.Style = DevComponents.AdvTree.NodeStyles.BlueLight;
CHildNode.Style.PaddingRight = 50;


CHildNode.Style.MarginBottom = 2;
CHildNode.CheckBoxVisible = true;
CHildNode.ExpandVisibility = DevComponents.AdvTree.eNodeExpandVisibility.Hidden ;


MainNode.Nodes.Add(CHildNode);
}
}

prans_tork
دوشنبه 25 خرداد 1394, 18:40 عصر
دوستان حل شد:لبخند:

مشکل از این کد بود
byte CSControlD = AccessControlClass.Val<byte>(childItem.Tag);

و این درصورتی بود که تگ های من بیشتر از byte بودن:خجالت:

ممنونم