2016-08-19 4 views
-3

Ich versuche, TextBox zu erstellen, so dass Benutzer nichts eingeben können, aber sie in der Lage sein sollten, Informationen mit Clipboard Text einzufügen.Lassen Sie Benutzer kopieren und Text in Textfeld einfügen, deaktivieren Sie jedoch manuelle Bearbeitung in C#

+1

Was Sie bisher versucht haben? Was genau ist deine Frage? Momentan sieht es so aus, als würden Sie uns sagen, was Sie vorhaben. –

+0

Sorry für vage Frage. Also versuche ich TextBox zu erstellen, die nur durch Kopieren und Einfügen bearbeitet werden kann. Der Benutzer sollte nicht in der Lage sein, manuell etwas in das Textfeld einzugeben, sondern nur das Einfügen in dieses Textfeld. Bisher habe ich CustomTextBox, die TextBox-Klasse erweitert. Und überschreiben Sie die folgende Methode. geschützt überschreiben void WndProc (ref Nachricht m) – Sagar0921

+1

Es gibt mehrere Möglichkeiten, dies zu tun, aber warum möchten Sie? Sie machen es nur schwieriger, die Anwendung zu verwenden. Es gibt nichts hier, um jemanden davon abzuhalten, open notepad.exe zu öffnen, zu tippen, was auch immer sie wollen, den Text, den sie gerade eingegeben haben, zu kopieren und ihn in Ihre Textbox einzufügen, um so Ihre Anforderung "keine manuelle Bearbeitung" zu umgehen. – Jakotheshadows

Antwort

2

Sie können die TextBox KeyPress event abonnieren, in der Sie immer die e.Handled Eigenschaft auf True festlegen, außer wenn Sie eine Zwischenablagekombination (STRG + C, V) drücken.

in die Zwischenablage Kombination identifizieren Sie werden auch in dem auf die KeyDown event abonnieren haben Sie die Taste oder Tastenkombination über einen in der Lage, zu identifizieren, dann Boolean Variable, die Sie gedrückt wurde (von der, die Sie KeyPress Ereignis lesen) kann angeben, ob die Kombination zulässig ist oder nicht.

Doing, was ich gerade beschrieben, wird jede Tastatureingabe (dh nicht STRG + C oder STRG + V) zu nicht von der TextBox behandelt werden, so wird es keine Zeichen hinzufügen, wenn Sie nicht einfügen.

Dim InputIsCommand As Boolean = False 

Private Sub TextBox1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown 
    InputIsCommand = e.Control = True AndAlso (e.KeyCode = Keys.V OrElse e.KeyCode = Keys.C) 
End Sub 

Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress 
    e.Handled = Not InputIsCommand 
End Sub 

C# Version:

public Form1() //Form constructor. 
{ 
    InitializeComponent(); 
    textBox1.KeyPress += textBox1_KeyPress; 
    textBox1.KeyDown += textBox1_KeyDown; 
} 

bool InputIsCommand = false; 

private void textBox1_KeyDown(Object sender, System.Windows.Forms.KeyEventArgs e) 
{ 
    InputIsCommand = e.Control == true && (e.KeyCode == Keys.V || e.KeyCode == Keys.C); 
} 

private void textBox1_KeyPress(Object sender, System.Windows.Forms.KeyPressEventArgs e) 
{ 
    e.Handled = !InputIsCommand; 
} 
+0

Konnten Sie den Text immer noch nicht bearbeiten, indem Sie einen Teil markieren und mit der Maus "ausschneiden"? – bitnine

+0

Vielen Dank für diese Antwort. Es funktioniert jetzt. Aber im Moment funktioniert es nur mit der rechten Maustaste "Einfügen". Ist das mit Strg + V möglich? – Sagar0921

+0

@bitnine: Ja, aber er hat nicht gebeten, nicht in der Lage zu sein. Nur nicht eintippen. –

Verwandte Themen