diff --git a/PROMS/Volian.Controls.Library/ListBoxMulti.cs b/PROMS/Volian.Controls.Library/ListBoxMulti.cs new file mode 100644 index 00000000..51582552 --- /dev/null +++ b/PROMS/Volian.Controls.Library/ListBoxMulti.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Volian.Controls.Library +{ + public partial class ListBoxMulti : ListBox + { + public ListBoxMulti() + { + Visible = true; + SelectionMode = SelectionMode.MultiSimple; + + SelectedIndexChanged += lb_SelectedIndexChanged; + + Disposed += ListBoxMulti_Disposed; + } + + public int singleselectedindex { get; set; } + + private void lb_SelectedIndexChanged(object sender, EventArgs e) + { + ListBoxMulti tmp = (ListBoxMulti)sender; + + if (tmp.SelectedItems.Count == 1 && tmp.singleselectedindex == 0) + { + tmp.ClearSelected(); + } + else if (tmp.SelectedItems.Count == 1) + tmp.singleselectedindex = tmp.SelectedIndex; + else + tmp.singleselectedindex = -1; + + } + + private void ListBoxMulti_Disposed(object sender, EventArgs e) + { + SelectedIndexChanged -= lb_SelectedIndexChanged; + } + } +} diff --git a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj index 61b2eb86..87305e39 100644 --- a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj +++ b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj @@ -280,6 +280,9 @@ ImageItem.cs + + Component + Form diff --git a/PROMS/Volian.Controls.Library/frmEPAnnotationDetails.cs b/PROMS/Volian.Controls.Library/frmEPAnnotationDetails.cs index 0f260f1a..44c3cada 100644 --- a/PROMS/Volian.Controls.Library/frmEPAnnotationDetails.cs +++ b/PROMS/Volian.Controls.Library/frmEPAnnotationDetails.cs @@ -24,7 +24,7 @@ namespace Volian.Controls.Library private Dictionary _DicCheckBox; private Dictionary _DicComboBox; private Dictionary _DicSingleRO; - private Dictionary _DicMultiRO; + private Dictionary _DicMultiRO; private string multiseparator = ","; @@ -35,7 +35,7 @@ namespace Volian.Controls.Library _DicCheckBox = new Dictionary(); _DicComboBox = new Dictionary(); _DicSingleRO = new Dictionary(); - _DicMultiRO = new Dictionary(); + _DicMultiRO = new Dictionary(); InitializeSpecificControls(currAnn); _MyStepTabRibbon = new StepTabRibbon(); } @@ -138,16 +138,12 @@ namespace Volian.Controls.Library } if (EP.type.ToLower() == "romulti") { - ListBox lb = new ListBox(); - lb.Visible = true; + ListBoxMulti lb = new ListBoxMulti(); List tmps = EP.getROList(currAnn, false); lb.DisplayMember = "Text"; lb.ValueMember = "Value"; - lb.Width = TextRenderer.MeasureText(tmps.OrderByDescending(x => x.Text.Length).First().Text, lb.Font).Width + SystemInformation.VerticalScrollBarWidth; - lb.SelectionMode = SelectionMode.MultiSimple; - //lb.IsSynchronizedWithCurrentItem = false; lb.DataSource = tmps; _DicMultiRO.Add(EP.name, lb); @@ -170,7 +166,7 @@ namespace Volian.Controls.Library pair.Value.SelectedValue = -1; } - foreach (KeyValuePair pair in _DicMultiRO) + foreach (KeyValuePair pair in _DicMultiRO) { pair.Value.ClearSelected(); string val = MyConfig.GetValue("EP", pair.Key); @@ -184,7 +180,10 @@ namespace Volian.Controls.Library pair.Value.SetSelected(pair.Value.FindString(text), true); } } - } + pair.Value.singleselectedindex = -1; + } + + } private void FieldStepRTB_Enter(object sender, EventArgs e) @@ -246,7 +245,7 @@ namespace Volian.Controls.Library } else if (EP.type.ToLower() == "romulti") { - ListBox lbcur = _DicMultiRO[EP.name]; + ListBoxMulti lbcur = _DicMultiRO[EP.name]; string newvalues = String.Join(multiseparator, lbcur.SelectedItems.OfType().Select(item => item.Value)); string oldvalues = MyConfig.GetValue("EP", EP.name); if (newvalues != oldvalues) @@ -287,6 +286,11 @@ namespace Volian.Controls.Library tb.Enter -= FieldStepRTB_Enter; } + foreach (ListBoxMulti lb in _DicMultiRO.Values) + { + lb.Dispose(); + } + Load -= Form1Load_setDefaults; } }