我需要從特定子控制元件(GroupBox 內的圖片框)中保存影像,請參閱此
public IEnumerable<Control> GetAll(Control control, Type type)
{
var controls = control.Controls.Cast<Control>();
return controls.SelectMany(ctrl => GetAll(ctrl, type)).Concat(controls).Where(c => c.GetType() == type);
}
private void MyControlsTest()
{
var c = GetAll(this, typeof(CheckBox));
var ckBoxlist = c.OfType<CheckBox>().Where(ckBox => ckBox.Checked == true);
foreach (var i in ckBoxlist)
{
MessageBox.Show(i.Name);
/*Save PictureBox inside CheckBox if ckBox.Checked == true*/
}
}
uj5u.com熱心網友回復:
因為您的控制元件具有相同的名稱,您可以轉換您知道的控制元件的名稱,以找到您想要的控制元件:
foreach(var g in this.Controls.OfType<GroupBox>()){ //'this' is the Form. If all your GroupBoxes are in some other panel/container, use that panel's name instead
var cb = g.Controls[g.Name.Replace("gp", "ck")] as CheckBox;
var pb = g.Controls[g.Name.Replace("gpBox", "pb")] as PictureBox;
//PUT MORE CODE HERE e.g. if(cb.Checked) pb.Image.Save(...)
}
如果 cb/pb 是null,您需要查看層次結構以了解原因;我無法從螢屏截圖中看出控制元件嵌套的樣子。索引 ControlCollection[some name]會帶來第一個控制元件,該控制元件是集合的直接子成員,但請記住控制元件存在于樹中 - 如果您在組框內有一個面板,則復選框是面板的子級,而不是組框( panel 是 groupbox 的子項)。
如果事情嵌套得很深,您可以查看ControlCollection.Find - 您可以指定一個 bool 以使其挖掘所有子項。請注意,它回傳一個控制元件陣列
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/433991.html
