Advertisement
Komak57

MultiLineListBox.cs

Sep 7th, 2013
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.13 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. namespace DataStripper
  11. {
  12.     public partial class MultiLineListView : System.Windows.Forms.ListBox
  13.     {
  14.         public MultiLineListView()
  15.         {
  16.             //InitializeComponent();
  17.             this.DrawMode = DrawMode.OwnerDrawVariable;
  18.             this.ScrollAlwaysVisible = true;
  19.             tbox.Hide();
  20.             tbox.mllb = this;
  21.             Controls.Add(tbox);
  22.         }
  23.  
  24.         protected override void OnMeasureItem(MeasureItemEventArgs e)
  25.         {
  26.             if (Site != null)
  27.                 return;
  28.             if (e.Index > -1)
  29.             {
  30.                 string s = Items[e.Index].ToString();
  31.                 float best = 0;
  32.                 foreach (string line in s.Split(new string[] { Environment.NewLine }, StringSplitOptions.None))
  33.                 {
  34.                     float chk = e.Graphics.MeasureString(line, Font, Width).Width;
  35.                     if (chk > best)
  36.                         best = chk;
  37.                 }
  38.                 SizeF sf = e.Graphics.MeasureString(s, Font, Width);
  39.                 int htex = 1;//(e.Index == 0) ? 15 : 10;
  40.                 e.ItemHeight = (int)(sf.Height*Items.Count) + htex;
  41.                 e.ItemWidth = (int)best;
  42.                 /*NTextBox i = (NTextBox)Items[e.Index];
  43.                 e.ItemHeight = i.Height;
  44.                 e.ItemWidth = i.Width;*/
  45.             }
  46.         }
  47.  
  48.         protected override void OnDrawItem(DrawItemEventArgs e)
  49.         {
  50.             if (Site != null)
  51.                 return;
  52.             if (e.Index > -1)
  53.             {
  54.                 string s = Items[e.Index].ToString();
  55.  
  56.                 if ((e.State & DrawItemState.Focus) == 0)
  57.                 {
  58.                     e.Graphics.FillRectangle(new SolidBrush(SystemColors.Window), e.Bounds);
  59.                     e.Graphics.DrawString(s, Font, new SolidBrush(SystemColors.WindowText),
  60.                         e.Bounds);
  61.                     e.Graphics.DrawRectangle(new Pen(SystemColors.Highlight), e.Bounds);
  62.                 }
  63.                 else
  64.                 {
  65.                     e.Graphics.FillRectangle(new SolidBrush(SystemColors.Highlight), e.Bounds);
  66.                     e.Graphics.DrawString(s, Font, new SolidBrush(SystemColors.HighlightText),
  67.                         e.Bounds);
  68.                 }
  69.             }
  70.         }
  71.  
  72.         protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
  73.         {
  74.             int index = IndexFromPoint(e.X, e.Y);
  75.  
  76.             if (index != ListBox.NoMatches &&
  77.                 index != 65535)
  78.             {
  79.  
  80.                 /*if (e.Button == MouseButtons.Right)
  81.                 {
  82.                     SelectedIndex = index;
  83.                     Focus();
  84.                     //tbox.index = index;
  85.                 }*/
  86.                 /*if (e.Button == MouseButtons.Right)
  87.                 {
  88.  
  89.                     string s = Items[index].ToString();
  90.                     Rectangle rect = GetItemRectangle(index);
  91.  
  92.                     tbox.Location = new Point(rect.X, rect.Y);
  93.                     tbox.Size = new Size(rect.Width, rect.Height);
  94.                     tbox.Text = s;
  95.                     tbox.index = index;
  96.                     tbox.SelectAll();
  97.                     tbox.Show();
  98.                     tbox.Focus();
  99.                 }*/
  100.             }
  101.  
  102.             base.OnMouseUp(e);
  103.         }
  104.  
  105.         NTextBox tbox = new NTextBox();
  106.  
  107.         class NTextBox : TextBox
  108.         {
  109.             public MultiLineListView mllb;
  110.             public int index = -1;
  111.  
  112.             bool errshown = false;
  113.             bool brementer = false;
  114.  
  115.             public NTextBox()
  116.             {
  117.                 Multiline = true;
  118.                 MaxLength = 2147483647;
  119.                 MaximumSize = new System.Drawing.Size(0, 0);
  120.                 WordWrap = false;
  121.                 ScrollBars = ScrollBars.Both;
  122.                 AcceptsReturn = true;
  123.                 AcceptsTab = true;
  124.             }
  125.  
  126.             protected override void OnKeyUp(KeyEventArgs e)
  127.             {
  128.                 if (brementer)
  129.                 {
  130.                     Text = "";
  131.                     brementer = false;
  132.                 }
  133.                 base.OnKeyUp(e);
  134.             }
  135.  
  136.             protected override void OnKeyPress(KeyPressEventArgs e)
  137.             {
  138.                 base.OnKeyPress(e);
  139.                 /*if (e.KeyChar == (int)Keys.Return)
  140.                 {
  141.                     if (Text.Trim() == "")
  142.                     {
  143.                         errshown = true;
  144.                         brementer = true;
  145.  
  146.                         MessageBox.Show(
  147.                             "Cannot enter NULL string as item!",
  148.                             "Fatal error!", MessageBoxButtons.OK,
  149.                             MessageBoxIcon.Error);
  150.                     }
  151.                     else
  152.                     {
  153.                         errshown = false;
  154.                         mllb.Items[index] = Text;
  155.                         Hide();
  156.                     }
  157.  
  158.                 }*/
  159.  
  160.                 /*if (e.KeyChar == (int)Keys.Escape)
  161.                 {
  162.                     Text = mllb.Items[index].ToString();
  163.                     Hide();
  164.                     mllb.SelectedIndex = index;
  165.                 }*/
  166.  
  167.             }
  168.  
  169.             protected override void OnLostFocus(System.EventArgs e)
  170.             {
  171.  
  172.                 if (Text.Trim() == "")
  173.                 {
  174.                     if (!errshown)
  175.                     {
  176.                         MessageBox.Show(
  177.                             "Cannot enter NULL string as item!",
  178.                             "Fatal error!", MessageBoxButtons.OK,
  179.                             MessageBoxIcon.Error);
  180.                     }
  181.                     errshown = false;
  182.                 }
  183.                 else
  184.                 {
  185.                     errshown = false;
  186.                     mllb.Items[index] = Text;
  187.                     Hide();
  188.                 }
  189.                 base.OnLostFocus(e);
  190.             }
  191.         }
  192.  
  193.         protected override void OnKeyDown(KeyEventArgs e)
  194.         {
  195.             if (e.KeyData == Keys.F2)
  196.             {
  197.                 int index = SelectedIndex;
  198.                 if (index == ListBox.NoMatches ||
  199.                     index == 65535)
  200.                 {
  201.                     if (Items.Count > 0)
  202.                         index = 0;
  203.                 }
  204.                 if (index != ListBox.NoMatches &&
  205.                     index != 65535)
  206.                 {
  207.  
  208.                     string s = Items[index].ToString();
  209.                     Rectangle rect = GetItemRectangle(index);
  210.  
  211.                     tbox.Location = new Point(rect.X, rect.Y);
  212.                     tbox.Size = new Size(rect.Width, rect.Height);
  213.                     tbox.Text = s;
  214.                     tbox.index = index;
  215.                     tbox.SelectAll();
  216.                     tbox.Show();
  217.                     tbox.Focus();
  218.                 }
  219.             }
  220.             base.OnKeyDown(e);
  221.         }
  222.     }
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement