在Visual Studio Compact Framework 3.5 C#中隐藏和重新排列GUI元素(字段框,按钮,标签等)的最佳方法是什么?
我试图实现字段和标签的隐藏,目前它似乎是一个非常繁琐的过程(我不确定它是否可以改进)。我如何做的示例在下面的代码中......
正如你所看到的,它会变得相当混乱。我在那里做的是首先生成一个布尔控制数组,并使用该数组我首先隐藏指定的字段,然后向上移动所有内容以删除空格。我想找到一个更好的方法来做到这一点。
我也在寻找可能控制这些GUI元素排列的方法。假设我想让LastName首先出现,而不是FirstName字段。如果不必重写此表单中的代码,我怎么能这样做呢?
// Generate boolean array to control visible status of each field
bool[] hideControl = new bool[13];
for (int i = 0; i <= 12; i++)
{
hideControl[i] = Convert.ToBoolean(MobileConfiguration.Settings[i]);
}
// Difference in pixels between two input panels
int diff = this.txtLastName.Location.Y - this.txtFirstName.Location.Y;
// Hide Fields
hideFields(hideControl);
// Movie Fields
moveFields(hideControl, diff);
..................
// hideFields function
if (hideValue[0] == true)
{
// Hide Install
this.txtFirstName.Visible = false;
this.lblFirstName.Visible = false;
}
// And so forth for each 12 fields
...................
// moveFields function
if (hideValue[0] == true)
{
// LastName -- 2nd field
this.txtLastName.Location = new Point(this.txtLastName.Location.X, (this.txtLastName.Location.Y - diff));
this.lblLastName.Location = new Point(this.lblLastName.Location.X, (this.lblLastName.Location.Y - diff));
// So forth for 11 fields
}
if (hideValue[1] == true)
{
// Move up other 10 fields
}
if (hideValue[2] == true)
{
// Move up other 9 fields
}
我对这个表单的gui看起来如下(单行上的标签和文本框):
PanelName1
FirstName ______
LastName _______
Addresss _______
....etc
答案 0 :(得分:2)
将控件放到面板上,然后你可以隐藏面板,这将隐藏它是父控件的控件,请记住这可能会影响控件的循环,但这很容易解决。移动面板也会移动控件。
问题在于您是否可以重复使用控件,或者您的表单上是否有太多控件以方便用户理解。
如果您仍需要循环控件,可以使用this extension method