2017-12-08 9 views
0

Windowsフォームラベルから継承したカスタムラベルを持つwinformがあります。ユーザーがこのラベルを編集して値を変更できるようにする必要があります。ユーザーがラベルを編集してテキストを変更できるようにする - c#winform

readonlyプロパティをfalseに変更することで、ユーザーが編集できるようにするためにtextboxを使用できることはわかっています。

私がラベルを使用する理由は、テキストの向き、したがってカスタムラベルを変更する必要があるかもしれないという理由です。

私の質問は、ユーザーが通常のWinformラベルを編集できるようにすることですか?

投稿:Editable Label Controlsは有効な解決策ではありません。それにも受け入れられた答えはありません。

+0

ラベルは入力用に使用されていません。テキストボックスを使用して、テキストフィールドをラベルのテキストにバインドすることができます。 –

+0

私は、ラベルの編集機能を実行するためにコンテキストメリットを実装することを考えています。その後、テキストボックスをポップアップしてラベルに割り当てることができますか? – blackfury

+0

'single/double click'で' label'を 'textbox'に変更することができます。 – Taleeb

答えて

3

これはこれまでのところ最良の選択肢ではありませんが、依然として選択肢です。フォームKeyPreviewをtrueに設定し、KeyDownキーイベントハンドラをフォームに追加し、Clickイベントハンドラをラベルに追加します。 Clickイベントハンドラで、boolをtrueに設定します。 keydownハンドラの中で、boolがtrueの場合、ラベルTextのプロパティに押されたキーを追加するifステートメントがあります。ユーザーがラベルをクリックしたときに入力したものがラベルに入ると、そのようになります。私の恐ろしい説明については

例コード:

public static Form f1 = new Form(); 
public static Label l1 = new Label(); 
public static bool isLabelClicked = false; 

次にどんな方法でこれらを置くには、フォームとそれのオブジェクトのプロパティを設定します。それは」didnの

f1.KeyPreview = true; 
l1.Click += new EventHandler (l1_Clicked); 
f1.KeyDown += new KeyEventHandler (f1_keydown); 

は、その後、あなたのプロジェクトでこれらの2つの方法

public static void l1_Clicked(object sender, EventArgs e) 
{ 
    isLabelClicked = true; 
} 

public static void f1_keydown(object sender, KeyEventArgs e) 
{ 
    if (isLabelClicked == true) 
    { 
     if (e.KeyCode == Keys.A) 
     { 
      l1.Text += "a"; 
     } 
     else if (e.KeyCode == Keys.B) 
     { 
      //Etc. For each key 
     } 
    } 
} 

を持ってそれはそれを行うための最も効率的な方法ではありません、あなたはその後ブール虚偽を作るための方法を設定する必要があるだろう入力したたびにラベルの値が変更され続けるが、うまくいく。

巨大なif、else ifブロックを書き出すことなく、それぞれの異なるキーを処理する簡単な方法があると確信しています。「、」は「Oemcomma」になる可能性があるためKeyCodeを変換するだけです。あなたのコーディングで幸運を。

関連する問題