Winform程序,我想要獲得頁面上某個控件的路徑,比如Form.panel1.panel2.label,然後寫了一個遞歸調用
如下所示
public static string GetControlParents(Control control, string parentName)
{
Control parentControl = control.Parent;
if (parentControl != null)
parentName = parentControl.Name + "." + parentName;
if (parentControl.Parent != null)
GetControlParents(parentControl, parentName);
return parentName.Trim('.');
}
string path = PublicFunction.GetControlParents(control, “”);
像這樣直接調用就行了,但是問題來了,我每次調用的時候總是隻能得到一個父控件的名稱
在最終的調試過程中發現了問題,按F11單步調試,在代碼最後return的時候出現了問題,每次return都會再次返回到遞歸方法裏面,好像又返回了
解決如下
public static string GetControlParents(Control control, string parentName)
{
Control parentControl = control.Parent;
if (parentControl != null)
parentName = parentControl.Name + "." + parentName;
if (parentControl.Parent != null)
parentName = GetControlParents(parentControl, parentName);
return parentName.Trim('.');
}
原來是沒有把每次執行的返回值拿出來,導致它在返回的時候反向順序return,最終回到了第一次的調用。
技術不到家,遞歸要慎用
下面給出一個簡單的方法
public static string GetControlParents(Control control)
{
string sParent = "";
while (control.Parent != null)
{
sParent = control.Parent.Name + "." + sParent;
control = control.Parent;
}
sParent = sParent.Trim('.');
return sParent;
}