プロが教える店舗&オフィスのセキュリティ対策術

TreeViewのノードを編集する際、例えば、ノード名の後ろ2文字は編集せない、といったことをやりたいと思っています。

TreeViewのノードにファイル名を表示させています。ノード名が変更されたら、その名前をローカルのファイル名に反映させるつもりです。しかし、ファイル名の後ろ2文字に特別な意味があり、この2文字をユーザに編集させない処理ができないか模索しています。

何かよい方法はないでしょうか?

開発環境
Visual Basic 2008
.NET FrameWord 2.0
Windows XP SP2

A 回答 (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側での処理は複数回呼ばれてしまうのでうまくないようです
ただ、編集中に他のノードを選択した際の動作を制御する必要があると思います
また、この実装の場合何も編集しなかった場合も動作がおかしくなるようです … 編集モードから抜けれない状況になります
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

教えて頂いたコードを自分でも試してみました。
加えて、以下のURLにサンプルがありました。

http://69.10.233.10:80/KB/tree/CustomizedLabelEd …

両方をコードを元に、無事、期待通りの動作をさせる
コードが作成できました。
ありがとうございました。

お礼日時:2008/05/18 17:53

ChangeイベントとかEditイベントとか起きないんでしたっけ?Text系の派生クラスなら起きそうな気がしますが。

そこでイベントをハンドルして表示するのを後ろ2文字以外にするとか、ちょっと使い勝手は悪くなりますが編集用のダイアログを出すとかするとできるかもしれません。
あまりTreeViewは使ったことがないのですみません。

今ググったらBeforeLabelEditというイベントが起きますね(VB6以前なのかな。書き方がVB6っぽい)これをハンドルすればいいと思います。
    • good
    • 0
この回答へのお礼

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"と表示されると
                 //思ったが駄目だった

お礼日時:2008/05/11 21:31

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

    • good
    • 0
この回答へのお礼

回答ありがとうございます。

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

お礼日時:2008/05/11 18:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A