2013-07-19 28 views
7

複数行のテキストボックスに貼り付ける文字数を制限する必要があります。テキストボックスに貼り付ける文字数を制限する方法は?

のは、これがテキストボックスに貼り付けることに私の文字列であるとしましょう:

良い一日のレディースとメンズ!
私はこれが可能である場合

を知りたい、助けてください。

ルールは最大ROWS 2.ルールを適用され、LINEあたりの最大文字数は10であり、貼り付けたテキストは、次のようにする必要があります:

私はちょうど

をワンL
良い一日
+0

ショートカットキー「Ctrl + V」を使用できますか? –

+0

はい、任意の形式の貼り付け(Ctrl + V、右クリック+貼り付け、SHIFT + INSERT)が可能です。 –

答えて

5

後に次の行に入りますか自動的にありませんものにこれを行う。テキストボックスでTextChangedイベントを処理し、変更されたテキストを手動で解析して必要な形式に制限する必要があります。

private const int MaxCharsPerRow = 10; 
private const int MaxLines = 2; 

private void textBox1_TextChanged(object sender, EventArgs e) { 
    string[] lines = textBox1.Lines; 
    var newLines = new List<string>(); 
    for (int i = 0; i < lines.Length && i < MaxLines; i++) { 
     newLines.Add(lines[i].Substring(0, Math.Min(lines[i].Length, MaxCharsPerRow))); 
    } 
    textBox1.Lines = newLines.ToArray(); 
} 
+0

ありがとう!これは私のためのトリックを作った。 :) –

1

これは次の方法で実現できます。テキスト変更イベントでは22

textBox1.MaxLength = 22; 

として、テキストボックスのmaximum lengthを設定

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    if (textBox1.Text.Length == 10) 
    { 
      textBox1.AppendText("\r\n"); 
    } 
} 

次これは、自動的に10文字

+0

フィードバックいただきありがとうございますが、私は既にその問題に関して制限があります(ユーザーが貼り付けをしないように普通に入力しようとしている場合)。私の問題は今ペーストをキャプチャする方法です... –

+0

@Nitesh - テキストの長さを貼り付けるときに直ちに0からペーストされたテキストのサイズになるため、貼り付けのソリューションが動作しません。正確には10ではないので、新しい行の追加は決して起こらない。また、ユーザーが2文字で入力し、Enterキーを押してから2文字を入力してEnterキーを押すと機能しません。 – shf301

+0

ya ..私は気づいた。もう一度試してみましょう – Nithesh

3

あなたは自分自身を処理するために(あなたのTextBoxに送信された)メッセージWM_PASTEをキャッチすることができます:

public class MyTextBox : TextBox 
{ 
    int maxLine = 2; 
    int maxChars = 10; 
    protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == 0x302)//WM_PASTE 
     { 
      string s = Clipboard.GetText(); 
      string[] lines = s.Split('\n'); 
      s = ""; 
      int i = 0; 
      foreach (string line in lines) 
      { 
       s += (line.Length > maxChars ? line.Substring(0, maxChars) : line) + "\r\n"; 
       if (++i == maxLine) break; 
      } 
      if(i > 0) SelectedText = s.Substring(0,s.Length - 2);//strip off the last \r\n 
      return; 
     } 
     base.WndProc(ref m);    
    } 
} 
+0

ありがとうございますが、コントロール(またはテキストボックス)を変更すると、私にとって痛みが大きくなります。 –

+0

@JackFrostは本当にありません。プロジェクトに別のクラスを追加するだけです。このクラスは再利用できます。これは最もクリーンなソリューションです。 –

+0

私は非常に似たような答えを取り除いた。 – Kamil

0

は、なぜあなたはこれを達成するために、クリップボードのデータにいけない仕事。以下は小さな例です。

String clipboardText = Clipbard.GetText(); 

// MAXPASTELENGTH - max length allowed by your program 

if(clipboardText.Length > MAXPASTELENGTH) 
{ 

    Clipboard.Clear(); 

    String newClipboardText = clipboardText.Substring(0, MAXPASTELENGTH); 

    // set the new clipboard data to the max length 
    SetData(DataFormats.Text, (Object)newClipboardText); 

} 

あなたが好きなところでデータを貼り付けることができます。データは、プログラムが許容する最大長に調整されます。

-2
private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     if (textBox1.Text.Length == 10) 
     { 
      textBox1.MaxLength = 10; 
      //MessageBox.Show("maksimal 10 karakter"); 
     } 
    } 
+3

これは既に与えられている他のソリューションよりもどのように役立ちますか? –

関連する問題