2014-09-02 115 views
0

我有一個鼠標按下事件,我寫文字的RichTextBox:如何向richTextBox添加新行?

private void pictureBoxSnap_MouseDown(object sender, MouseEventArgs e) 
     { 
      richTextBox1.Text += "Rectangle Location: " + e.Location + Environment.NewLine; 
      Bitmap bmp; 
      Point pnt; 

      if (e.Button == MouseButtons.Right) 
      { 
       cm.Show(pictureBoxSnap, e.Location); 

       return; 
      } 

      if (e.Button == MouseButtons.Left) 
      { 
       if (checkError(listBox1.SelectedIndex, "pictureBoxSnap_MouseDown") == true) { return; } //if listBox1 empty 

       if (isCroppedList[listBox1.SelectedIndex] == true) { return; } 

       mouseDown = e.Location; 

       if (canDrawNormallyList[listBox1.SelectedIndex] == false) 
       { 
        bmp = new Bitmap(pictureBoxSnap.Width - 4, pictureBoxSnap.Height - 4); 

        pnt = PointToScreen(pictureBoxSnap.Location); 

        g = Graphics.FromImage(bmp); 

        g.CopyFromScreen(pnt.X + 2, pnt.Y + 2, 0, 0, new Size(bmp.Width, bmp.Height)); 

        g.Dispose(); 

        windowsBitmaps[listBox1.SelectedIndex] = bmp; 
       } 
       else 
       { 
        if (thumb != IntPtr.Zero) 
        { 
         MessageBoxButtons buttons = MessageBoxButtons.OK; 
         MessageBoxIcon icon = MessageBoxIcon.Error; 

         MessageBox.Show("ERROR in pictureBoxSnap_MouseDown: thumb != IntPtr.Zero", "ERROR", buttons, icon); 

         this.Close(); 
        } 
       } 
      } 
     } 

在鼠標按下事件我寫了矩形的位置。

然後在DrawRectangle的方法,我想在實時richTextBox1顯示矩形的大小:

private void DrawRectangle(Point pnt) 
     { 
      g = Graphics.FromImage(img); 

      g.Clear(Color.FromKnownColor(KnownColor.Control)); 

      if (pnt.X == mouseDown.X || pnt.Y == mouseDown.Y) 
      { 
       g.DrawLine(Pens.Firebrick, mouseDown.X, mouseDown.Y, pnt.X, pnt.Y); 
      } 
      else 
      { 
       g.DrawRectangle(Pens.Firebrick, Math.Min(mouseDown.X, pnt.X), Math.Min(mouseDown.Y, pnt.Y), 
          Math.Abs(mouseDown.X - pnt.X), Math.Abs(mouseDown.Y - pnt.Y)); 
       richTextBox1.Text = "Rectangle Size: " + Math.Abs(mouseDown.X - pnt.X) + 
        Math.Abs(mouseDown.Y - pnt.Y); 
      } 

      g.Dispose(); 

      g = frm.CreateGraphics(); 

      g.DrawImage(img, 0, 0, img.Width, img.Height); 

      g.Dispose(); 
     } 

現在的問題是,當我讓鼠標按鈕按下鼠標左鍵單擊我看到位置,但隨後當我移動鼠標左右拖動它時,位置線被刪除,而我看到的是尺寸線。如果在DrawRectangle方法中,我也使+ =它只是添加尺寸線,很多時候填充整個richTextBox,當我移動/拖動鼠標aorund。

+0

richTextBox1.Text + =「Rectangle Location:」+ e.Location + Environment.NewLine; 使用這種語法 – Partha 2014-09-02 23:07:30

回答

0

您需要每次追加。你現在正在做的是覆蓋已經存在的文本。

此:

richTextBox1.Text = "Rectangle Location: " + e.Location + Environment.NewLine; 

..says:「在RichTextBox文本的值必須只能是我提供什麼

然而,這:

richTextBox1.Text += "Rectangle Location: " + e.Location + Environment.NewLine; 
//    ^^^^ append 

..says :「richtextbox文本必須是它目前的內容...加上這些額外的東西。」

+0

西蒙它添加了兩條線,但第一條和第一條靠近它,但在第一行。它沒有把它添加到一個新的行。它看起來像例如:大小:22,22地點:233,44都在第一行。 – 2014-09-02 23:11:22

+0

確保寫入'Size'的另一段代碼也有'+ ='。 – 2014-09-02 23:13:07

+0

Simon我將位置線移動到鼠標按下事件,所以當我點擊鼠標左鍵時,它會顯示richTextBox中的位置。 richTextBox1.Text + =「Rectangle Location:」+ e.Location + Environment.NewLine;鼠標向下事件中的同一行。第二行是在它現在在DrawRectangle方法中的位置,當我單擊鼠標左鍵時,我看到了位置,但是當我移動鼠標拖動鼠標時,行被刪除,而是從DrawRectangle中看到尺寸線方法。 – 2014-09-02 23:16:35

0

有一個標誌可變BLE。

int flag=0; 
if(flag==0) 
{ 
richTextBox1.Text += "Rectangle Location: " + e.Location; 
flag++; 
} 
else 
{ 
richTextBox1.Text += Environment.NewLine + "Rectangle Location: " + e.Location + ; 
} 
0

首先我想給你一些建議。當使用if語句時,如果(isCroppedList [listBox1.SelectedIndex] == true)當您僅使用 if(isCroppedList [listBox1.SelectedIndex]),則無需執行if(isCroppedList [listBox1.SelectedIndex] == true)。 可能解決您的問題的解決方案可能是:檢查多行設置爲True,或嘗試richTextBox.AppendText(txt)。