2016-05-19 57 views
0

我正在處理C#Windows窗體應用程序,其中有一個不可編輯的TextBox,顯示自定義類Note的幾個對象的詳細信息。C# - 根據點擊位置選擇文本框的行

Note有一個重寫ToString()方法輸出所有在單獨一行標籤的屬性,所以由音符對象返回的字符串應該是這樣的:

「記錄到:12:00

記錄的:史蒂夫

注意內容:Hello World」的

我想每個屬性,在TextBox一個單獨的行出現,並且會有在一個音符的數據結束和下一個音符的開始之間是一個額外的空行。

這一切工作正常,我現在要實現的是能夠使用光標從文本框'選擇'筆記。

理想情況下,我想要的是,如果包含筆記數據的3行中的任何一行都被點擊,那麼與該筆記相關的所有三行都會突出顯示。

有沒有人知道這是可能的使用TextBox?如果是這樣,我會去解決它嗎?

感謝,

馬克

+1

文本框是不是真的適合這項任務。 – CathalMF

+1

我也想知道如何使用ListBox,但我一直在努力將字符串分成3行。這會比使用文本框更容易解決嗎? @CathalMF – marcuthh

+0

也許發佈您的列表框代碼,我們可以嘗試修復它。 – CathalMF

回答

1

我寫了一個自定義的FlowLayoutPanel的這你想要做什麼。

每次單擊「註釋」時,都會引發NoteClick事件,並且在事件處理程序中,我只是從文本框中選擇文本。

如果需要,您可以更改文本框的格式。我讓他們看起來像一個標籤。

namespace WindowsFormsApplication3 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent();  

      noteFlow1.NoteClick += new NoteFlow.ClickHandler(noteFlow1_NoteClick); 

      noteFlow1.Add("Hello" + Environment.NewLine + "Hello2" + Environment.NewLine + Environment.NewLine); 
      noteFlow1.Add("Hello" + Environment.NewLine + "Hello2" + Environment.NewLine + Environment.NewLine); 
      noteFlow1.Add("Hello" + Environment.NewLine + "Hello2" + Environment.NewLine + Environment.NewLine); 
      noteFlow1.Add("Hello" + Environment.NewLine + "Hello2" + Environment.NewLine + Environment.NewLine); 
      noteFlow1.Add("Hello" + Environment.NewLine + "Hello2" + Environment.NewLine + Environment.NewLine); 
     } 

     void noteFlow1_NoteClick(object sender, EventArgs e) 
     { 
      TextBox sndr = sender as TextBox; 
      sndr.SelectAll(); 
     } 
    } 


    public class NoteFlow : FlowLayoutPanel 
    { 
     public delegate void ClickHandler(object sender, EventArgs e); 
     public event ClickHandler NoteClick; 

     public NoteFlow() 
     { 
      base.AutoScroll = true; 
      base.FlowDirection = FlowDirection.TopDown; 
     } 

     public void Add(string noteText) 
     { 
      TextBox TextBox1 = new TextBox(); 
      TextBox1.Multiline = true; 
      TextBox1.Text = noteText; 
      TextBox1.ReadOnly = true; 
      TextBox1.BorderStyle = 0; 
      TextBox1.BackColor = this.BackColor; 
      TextBox1.TabStop = false; 
      Size size = TextRenderer.MeasureText(TextBox1.Text, TextBox1.Font); 
      TextBox1.Width = size.Width; 
      TextBox1.Height = size.Height; 
      TextBox1.Click += new EventHandler(TextBox1_Click); 
      base.Controls.Add(TextBox1); 
     } 

     void TextBox1_Click(object sender, EventArgs e) 
     { 
      if (NoteClick != null) 
      { 
       NoteClick(sender, e); 
      } 
     } 
    } 
} 

enter image description here

+0

這已經證明是我想要的。感謝你付出的努力! – marcuthh