I have the following code in a portion of my program that hides/shows certain elements based on the status of a certain checkbox:
private void enableFolderVariableRemoval_CheckedChanged(object sender, EventArgs e)
{
if (enableFolderVariableRemoval.Checked)
{
cleanFolderTextPanel.Visible = true;
cleanTextPanel.Visible = true;
}
else
{
cleanFolderTextPanel.Visible = false;
if (cleanFilenameTextPanel.Visible == false)
{
cleanTextPanel.Visible = false;
}
}
}
Is there a better way to handle this without a whole bunch of conditionals that set other controls to hide/show?
3 Answers 3
Not sure if there are any other constraints but here is one possible solution:
private void enableFolderVariableRemoval_CheckedChanged(object sender, EventArgs e)
{
cleanFolderTextPanel.Visible = enableFolderVariableRemoval.Checked;
cleanTextPanel.Visible = cleanFolderTextPanel.Visible || cleanFilenameTextPanel.Visible;
}
I'm not sure what the logic is in your code, the else and nested if in it is really confusing. But from what I can understand:
You can set the Visible Attribute for cleanFolderTextPanel straight from the checked value of enableFolderVariableRemoval.
The Visible Attribute for cleanTextPanel can then be calculated using a new Method and an inline if:
private void enableFolderVariableRemoval_CheckedChanged(object sender, EventArgs e)
{
var enableFolderVariableRemoval = enableFolderVariableRemoval.Checked;
cleanFolderTextPanel.Visible = enableFolderVariableRemoval;
cleanTextPanel.Visible = CleanTextPanelShouldBeHidden(enableFolderVariableRemoval ) ? false : cleanTextPanel.Visible
}
...
private static void CleanTextPanelShouldBeHidden(bool enableFolderVariableRemoval)
{
return !cleanFilenameTextPanel.Visible && !enableFolderVariableRemoval
}
Assuming you already moved your controls into logical panels, Perhaps you are asking a more general question: how do you prevent the following construct from going wild?
Some Event...
If GUI = 1
Panel1.Show()
Panel2.Hide()
Panel3.Hide()
...
If GUI = 2
Panel1.Hide()
Panel2.Show()
...
If GUI = 3
...
Make the GUI Panel
s implement a View_I
interface which has a .Show()
and .Hide()
methods, then the code becomes more like:
Some Event...
// hide the previous View if one exists
If View_I != Null
View_I.Hide()
If GUI = 1
View_I = Panel1
If GUI = 2
View_I = Panel2
...
// Show the new View
View_I.Show()
...
Now you can add other Panels
without code management proliferation.