créer un ListView
personnalisé qui a hérité de la norme ListView
en .NET
pour montrer une enum
valeurs que son Items
(WinForms
projet):Changer les ListView.Items personnalisés après chaque build
public class ScrapGroupsListView : ListView
{
public event EventHandler SelectedColorChanged;
private ScrapGroup _selectedGroup = ScrapGroup.None;
[DefaultValue(ScrapGroup.None)]
public ScrapGroup SelectedScrapGroup
{
get { return _selectedGroup; }
set
{
if (_selectedGroup != value)
{
_selectedGroup = value;
foreach (ListViewItem item in this.Items)
{
if (item != null)
{
if (item.Tag != null)
{
var itemColor = (ScrapGroup)item.Tag;
if (itemColor == ScrapGroup.None)
item.Checked = value == ScrapGroup.None;
else
item.Checked = value.HasFlag(itemColor);
}
}
}
if (SelectedColorChanged != null)
SelectedColorChanged.Invoke(this, EventArgs.Empty);
}
}
}
public ScrapGroupsListView()
{
this.Items.Clear();
this.CheckBoxes = true;
this.HeaderStyle = ColumnHeaderStyle.None;
this.View = View.List;
foreach (var value in Enum.GetValues(typeof(ScrapGroup)).Cast<ScrapGroup>())
{
this.Items.Add(new ListViewItem()
{
Name = value.ToString(),
Text = value.ToString(),
Tag = value,
});
}
}
protected override void OnItemChecked(ItemCheckedEventArgs e)
{
base.OnItemChecked(e);
var checkedScrapGroup = (ScrapGroup)e.Item.Tag;
if (e.Item.Checked)
if (checkedScrapGroup == ScrapGroup.None)
SelectedScrapGroup = ScrapGroup.None;
else
SelectedScrapGroup |= checkedScrapGroup;
else
SelectedScrapGroup &= ~checkedScrapGroup;
}
}
ScrapGrouop
est mon ENUM:
[Flags]
public enum ScrapGroup
{
None=0,
M=1,
E=2,
N=4,
H=8
}
quand je mets le ScrapGroupsListView
à ma forme, tout est OK et le contrôle n'a aucun objet:
Mais chaque fois que je construis mon projet, les ScrapGroup
valeurs ajouter à ScrapGroupsListView.Items
(temps de conception):
après le 1er construction:
après la construction 2ème:
et ainsi de suite.
Où est le problème?