コピー&ペーストで改行コードが入力されないようにするには?
対象製品
InputMan for .NET 4.0J Windows Forms Edition
詳細
Edit, Mask, Comboの各コントロールでは、クリップボードから改行を含む文字列がペーストされた場合、表示上は改行コードを無視して表示しますが(複数行設定の Editコントロールを除く)、Textプロパティには改行を含む文字列がそのまま維持されます。
Textプロパティに改行コードを含む文字列が設定されるのを防ぐには、これらのコントロールのTextChangingイベントをハンドルし、ここで改行を取り扱う処理を記述します。
次の例はEditコントロールを用いた実装例です。
[最初の改行コードの以降の文字列を削除する実装例]
.NET Framework標準のTextBoxコントロールと同様の動作になります。
[改行コードを除外する実装例]
なお、改行コードを除外する実装例については、MaskコントロールでFormatプロパティを以下のように設定することでも同様の処理を実装することができます。
Textプロパティに改行コードを含む文字列が設定されるのを防ぐには、これらのコントロールのTextChangingイベントをハンドルし、ここで改行を取り扱う処理を記述します。
次の例はEditコントロールを用いた実装例です。
[最初の改行コードの以降の文字列を削除する実装例]
.NET Framework標準のTextBoxコントロールと同様の動作になります。
[Visual Basic]
Private Sub Edit1_TextChanging(ByVal sender As System.Object, ByVal e As TextChangingEventArgs) _
Handles Edit1.TextChanging
'ペースト動作で改行コード以降の文字列を削除し
'標準のテキストボックスと同じ動作にします。
' 設定される文字列を取得します。
Dim temp As String = e.Result
' 改行文字の位置を検索します。
Dim start As Integer = temp.IndexOf(vbCr)
' 改行文字が発見された場合、改行文字以降を削除します。
If start > -1 Then
' デフォルトの動作を抑制します。
e.Cancel = True
' 改行文字以降の文字を削除した文字列を設定します。
Edit1.Text = temp.Remove(start)
' TextBoxと同様の動作になるように、カレットを行末に移動します。
Edit1.SelectionStart = Edit1.Text.Length
End If
End Sub
[C#]
private void edit1_TextChanging(object sender, GrapeCity.Win.Input.TextChangingEventArgs e)
{
// ペースト動作で改行コード以降の文字列を削除し
// 標準のテキストボックスと同じ動作にします。
// 設定される文字列を取得します。
string temp = e.Result;
// 改行文字の位置を検索します。
int start = temp.IndexOf( "¥r" );
// 改行文字が発見された場合、改行文字以降を削除します。
if( start > -1 )
{
// デフォルトの動作を抑制します。
e.Cancel = true;
// 改行文字以降の文字を削除した文字列を設定します。
edit1.Text = temp.Remove( start );
// TextBoxと同様の動作になるように、カレットを行末に移動します。
edit1.SelectionStart = edit1.Text.Length;
}
}
Private Sub Edit1_TextChanging(ByVal sender As System.Object, ByVal e As TextChangingEventArgs) _
Handles Edit1.TextChanging
'ペースト動作で改行コード以降の文字列を削除し
'標準のテキストボックスと同じ動作にします。
' 設定される文字列を取得します。
Dim temp As String = e.Result
' 改行文字の位置を検索します。
Dim start As Integer = temp.IndexOf(vbCr)
' 改行文字が発見された場合、改行文字以降を削除します。
If start > -1 Then
' デフォルトの動作を抑制します。
e.Cancel = True
' 改行文字以降の文字を削除した文字列を設定します。
Edit1.Text = temp.Remove(start)
' TextBoxと同様の動作になるように、カレットを行末に移動します。
Edit1.SelectionStart = Edit1.Text.Length
End If
End Sub
[C#]
private void edit1_TextChanging(object sender, GrapeCity.Win.Input.TextChangingEventArgs e)
{
// ペースト動作で改行コード以降の文字列を削除し
// 標準のテキストボックスと同じ動作にします。
// 設定される文字列を取得します。
string temp = e.Result;
// 改行文字の位置を検索します。
int start = temp.IndexOf( "¥r" );
// 改行文字が発見された場合、改行文字以降を削除します。
if( start > -1 )
{
// デフォルトの動作を抑制します。
e.Cancel = true;
// 改行文字以降の文字を削除した文字列を設定します。
edit1.Text = temp.Remove( start );
// TextBoxと同様の動作になるように、カレットを行末に移動します。
edit1.SelectionStart = edit1.Text.Length;
}
}
[改行コードを除外する実装例]
[Visual Basic]
Private Sub Edit1_TextChanging( ByVal sender As System.Object, ByVal e As GrapeCity.Win.Input.TextChangingEventArgs) _
Handles Edit1.TextChanging
'デフォルトの動作を抑制します。
e.Cancel = True
'改行文字を除去します。
Dim s As String = e.Result
s = s.Replace( vbCrLf, "" )
'改行文字を除去した文字列を設定します。
Edit1.Text = s
'カレットを行末に移動します。
Edit1.SelectionStart = Edit1.Text.Length
End Sub
[C#]
private void edit1_TextChanging( object sender, GrapeCity.Win.Input.TextChangingEventArgs e )
{
//デフォルトの動作を抑制します。
e.Cancel = true;
//改行文字を除去します。
string s = e.Result;
s = s.Replace( "¥r¥n", "" );
//改行文字を除去した文字列を設定します。
edit1.Text = s;
//カレットを行末に移動します。
edit1.SelectionStart = edit1.Text.Length;
}
Private Sub Edit1_TextChanging( ByVal sender As System.Object, ByVal e As GrapeCity.Win.Input.TextChangingEventArgs) _
Handles Edit1.TextChanging
'デフォルトの動作を抑制します。
e.Cancel = True
'改行文字を除去します。
Dim s As String = e.Result
s = s.Replace( vbCrLf, "" )
'改行文字を除去した文字列を設定します。
Edit1.Text = s
'カレットを行末に移動します。
Edit1.SelectionStart = Edit1.Text.Length
End Sub
[C#]
private void edit1_TextChanging( object sender, GrapeCity.Win.Input.TextChangingEventArgs e )
{
//デフォルトの動作を抑制します。
e.Cancel = true;
//改行文字を除去します。
string s = e.Result;
s = s.Replace( "¥r¥n", "" );
//改行文字を除去した文字列を設定します。
edit1.Text = s;
//カレットを行末に移動します。
edit1.SelectionStart = edit1.Text.Length;
}
なお、改行コードを除外する実装例については、MaskコントロールでFormatプロパティを以下のように設定することでも同様の処理を実装することができます。
[Visual Basic]
Me.Mask1.Format = New GrapeCity.Win.Input.MaskFormat("[^¥u000d¥u000a]*", "", "")
[C#]
mask1.Format = new GrapeCity.Win.Input.MaskFormat( "[^¥¥u000d¥¥u000a]*", "", "" );
Me.Mask1.Format = New GrapeCity.Win.Input.MaskFormat("[^¥u000d¥u000a]*", "", "")
[C#]
mask1.Format = new GrapeCity.Win.Input.MaskFormat( "[^¥¥u000d¥¥u000a]*", "", "" );
この文書は、以前は次のFAQ IDで公開されていました : 10742