• ベストアンサー

TreeVIewのノード名を編集する際、編集できる文字を制御したい

TreeViewのノードを編集する際、例えば、ノード名の後ろ2文字は編集せない、といったことをやりたいと思っています。 TreeViewのノードにファイル名を表示させています。ノード名が変更されたら、その名前をローカルのファイル名に反映させるつもりです。しかし、ファイル名の後ろ2文字に特別な意味があり、この2文字をユーザに編集させない処理ができないか模索しています。 何かよい方法はないでしょうか? 開発環境 Visual Basic 2008 .NET FrameWord 2.0 Windows XP SP2

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

文字列から最後の2文字を抜くのは BeginEditメソッド呼ぶときの方がいいようです 何かのアクション条件下でBeginEditを使う前に sLast = objNode.Text.SubString( objNode.Text.Length - 2 ) objNode.Text = objNodeText.SubString(0, objNode.Text.Length -2 ) objNode.BeginEdit() といった具合にします # objNodeが編集するノード、変数sLastは最後を覚えておくClassレベルの変数です 編集が終わったときの処理 TreeView1_AfterLabelEdit イベントで if e.Label isnot nothing then   TreeView1.LabelEdit = False   e.Node.EndEdit( False )   e.Node.Text = e.Label & sLast   ' これが無いと ラベルの内容がイベント終了後にe.Labelに戻ってしまう   e.CancelEdit = True else   ' これが無いと編集モードにならない …   e.Node.BeginEdit() end if といった具合でよさそうです BeforeLabelEdit側での処理は複数回呼ばれてしまうのでうまくないようです ただ、編集中に他のノードを選択した際の動作を制御する必要があると思います また、この実装の場合何も編集しなかった場合も動作がおかしくなるようです … 編集モードから抜けれない状況になります

wweerr
質問者

お礼

回答ありがとうございます。 教えて頂いたコードを自分でも試してみました。 加えて、以下のURLにサンプルがありました。 http://69.10.233.10:80/KB/tree/CustomizedLabelEdit.aspx 両方をコードを元に、無事、期待通りの動作をさせる コードが作成できました。 ありがとうございました。

その他の回答 (2)

  • suzukikun
  • ベストアンサー率28% (372/1325)
回答No.2

ChangeイベントとかEditイベントとか起きないんでしたっけ?Text系の派生クラスなら起きそうな気がしますが。そこでイベントをハンドルして表示するのを後ろ2文字以外にするとか、ちょっと使い勝手は悪くなりますが編集用のダイアログを出すとかするとできるかもしれません。 あまりTreeViewは使ったことがないのですみません。 今ググったらBeforeLabelEditというイベントが起きますね(VB6以前なのかな。書き方がVB6っぽい)これをハンドルすればいいと思います。

wweerr
質問者

お礼

BeforeLabelEditイベントが発生したときに、TreeViewに2文字抜いた文字列が表示されるよう、試しています。ですが、まだ、うまくいきません。 ちなみに、以下の方法で駄目でした。もう少し試してみます。 //Loadイベントでノード"test"を作成 //BeforeLabelEditイベントプロシージャの中で、 //以下のコードを実行 Dim strTemp As String = "" Dim intCnt As Integer = 0 mstrTemp = TreeView1.Nodes(0).Text intCnt = mstrTemp.Length For i As Integer = 0 To intCnt - 3 strTemp += mstrTemp.Chars(i) //strTempには"te"が保存される Next TreeView1.Nodes(0).Text = strTemp //ここで入力すればTreeView上                  //では"te"と表示されると                  //思ったが駄目だった

  • suzukikun
  • ベストアンサー率28% (372/1325)
回答No.1

制限はできないので後ろ2文字を取り出しておいて(VB.Rightかなんかで)あとで付け足すくらいが現実的なやり方ではないでしょうか?

wweerr
質問者

お礼

回答ありがとうございます。 ちなみ、ノード名を編集する際、表示されるのは後ろ2文字を除いた文字列だけを表示することはできないでしょうか? そうすれば、ユーザからみたら、自分は後ろ2文字以外を編集しているということもはっきり伝わるので、誤解の生まれないよい操作になるかと思っているのですが。どうでしょうか?

関連するQ&A