我需要在你点击垃圾按钮时,选择模式"打开(一个bool变量变为真)并且当你点击那个控件(让他们说一个按钮)时,应用程序"选择它"并使用另一个按钮,(确定按钮)应用程序应该知道您单击的Wich控件,然后删除它们,我有的问题是识别女巫控制您选择 的更新 对于"选择"我的意思是该应用程序知道您点击了哪个控件
答案 0 :(得分:0)
您可以按如下方式实现所需的功能。这个想法很简单,为了跟踪我们的最后一个选择,我们在类中有一个“ previousSelection ”变量,类型为“Control”。我们甚至可以使用“控制”类型列表来跟踪多个选择。
有一个切换按钮,用于启用/禁用“垃圾模式”,该按钮映射到“bool”类型的“ IsGarbageModeEnabled ”字段。然后我们有一个“ InitControlsRecursiveMethod(ControlCollection集合)”,它接收一组控件,我们将附加一个事件处理程序,即“ GenericClickHandler(Control c) “就我们而言。此处理程序只是在每次单击按钮时更新“previousSelection”。
最后我们按下了“ ConfirmDeletionBtn ”按钮,点击它后,我们会检查“GarbageMode”是否启用,如果是,我们会有一些基本的验证来检查是否被删除的控件不是我们的“删除”或“GarbageModeToggle”按钮本身(如果用户双击“删除”按钮,这可能会造成麻烦)。之后,它会删除/处理要删除的控件。
public partial class FormName : Form
{
//To keep track of the previously selected control (i.e. to be deleted)
private Control previousSelection { get; set; }
//To keep track of whether "Garbage Mode" is enabled or disabled
private bool IsGarbageModeEnabled { get; set; }
//Constructor
public FormName()
{
InitializeComponent();
IsGarbageModeEnabled = false;
previousSelection = new Control();
//Attach a generic click handling event to each control to
//update "previousSelection" with each click.
//Similar logic can be used for other events as well
//(e.g. GotFocus, which might even accomodate control selection via keyboard).
InitControlsRecursive(this.Controls);
}
//This attaches the GenericClickHandler(Control c) to each control on the form.
private void InitControlsRecursive(Control.ControlCollection collection)
{
foreach (Control c in collection)
{
c.MouseClick += (sender, e) => { GenericClickHandler(c); };
InitControlsRecursive(c.Controls);
}
}
//The generic click handling event we're using to update "previousSelection".
private void GenericClickHandler(Control c)
{
previousSelection = c;
}
//By clicking the confirm deletion / OK button, we would delete the last selected control.
private void ConfirmDeletionBtn_Click(object sender, EventArgs e)
{
if(IsGarbageModeEnabled == true)
{
if(previousSelection != ConfirmDeletionBtn || previousSelection != ToggleGarbageModeBtn)
{
this.Controls.Remove(previousSelection);
previousSelection.Dispose();
}
}
}
//This is used to enable/disable Garbage Mode. Controls can be deleted only once it is enabled.
private void ToggleGarbageModeBtn_Click(object sender, EventArgs e)
{
IsGarbageModeEnabled = !IsGarbageModeEnabled;
}
}
进一步阅读:
答案 1 :(得分:-1)
首先,您需要在某处跟踪“已选中”(单击)的控件。所以将它添加到表单的codebehind:
async void GarbageMode_Click(object sender, EventArgs e)
{
_garbageMode = true;
}
您需要一个标志来指示用户是否已激活垃圾模式:
async void Control_Click(object sender, EventArgs e)
{
if (_garbageMode)
{
_itemsToDelete.Add((Control)sender);
}
}
激活垃圾模式:
foreach (var control in _itemsToDelete)
{
this.Controls.Remove(control);
control.Dispose();
}
_itemsToDelete.Clear();
现在当他们“选择”一个控件时,你将它添加到列表中:
{{1}}
然后删除
{{1}}