電子書籍の厳選無料作品が豊富!

お世話になります。
VB2010です。

どのDatagridViewが選択されたかわかりやすいように
選択時にリッチテキストボックスを後ろに追加して、枠線があるかのように表現しています。

実行時の動きは問題なかったのですが、
デザイナで既存のDatagridViewを削除したときに
「オブジェクト参照がオブジェクトインスタンスに設定されていません。」というエラーが出ます。
また、なぜかDatagridViewを削除するとリッチテキストボックスが残像のように表示されます。
しかも選択しようとしても選択できません。選択できないので削除もできません。

デバッグで見てみてもリッチテキストボックス追加→削除は行われているのに、
なぜデザイナ時にこのエラーがでるのか&残像が出てくるのかわかりません。

どなたかヒントなどいただけると助かります。
よろしくお願いいたします。


↓リッチテキストボックスの追加と削除
'Enter時 後ろにRichTextBoxを表示
Protected Overrides Sub OnEnter(ByVal e As System.EventArgs)
MyBase.OnEnter(e)

'RichTextBox検索
Dim RTxtB As RichTextBox = Nothing
For Each Con As Control In MyBase.Parent.Controls
If Con.Name = "RTxtB_Shdw_" & MyBase.Name Then
RTxtB = Con
Exit For
End If
Next

If RTxtB Is Nothing Then
'RichTextBoxなし→後ろにRichTextBoxを追加
RTxtB_Shdw = New RichTextBox()
RTxtB_Shdw.Name = "RTxtB_Shdw_" & MyBase.Name
RTxtB_Shdw.BorderStyle = Windows.Forms.BorderStyle.None
RTxtB_Shdw.BackColor = Color.MidnightBlue
RTxtB_Shdw.TabStop = False
RTxtB_Shdw.Size = New System.Drawing.Size(MyBase.Width + 4, MyBase.Height + 4)
RTxtB_Shdw.Location = New System.Drawing.Point(MyBase.Location.X - 2, MyBase.Location.Y - 2)
Try
MyBase.Parent.Controls.Add(RTxtB_Shdw)
Catch ex As Exception
End Try
End If
End Sub

'Leave時に後ろのRichTextBoxを削除
Protected Overrides Sub OnLeave(ByVal e As System.EventArgs)
MyBase.OnLeave(e)

'RichTextBox検索
Dim RTxtB As RichTextBox = Nothing
For Each Con As Control In MyBase.Parent.Controls
If Con.Name = "RTxtB_Shdw_" & MyBase.Name Then
RTxtB = Con
Exit For
End If
Next

If Not RTxtB Is Nothing Then
'RichTextBoxあり→削除
MyBase.Parent.Controls.Remove(RTxtB)

RTxtB = Nothing
End If

End Sub

A 回答 (1件)

デザイナの表示にもプログラムコードのインスタンス生成時の


処理が実行されるようです。
> Overrides Sub
継承などで独自の機能を追加してそうなコードですので、
コンストラクタなどで必要なオブジェクトの生成が不十分
なのでは?

この回答への補足

すみません。

結局わからず…。

回答もつかないようなので〆させていただきます。
MARU4812さん、ありがとうございました!

補足日時:2011/06/28 10:02
    • good
    • 0
この回答へのお礼

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

デザイナ時にも実行されるんですね。。シラナカッタ!

>コンストラクタなどで必要なオブジェクトの生成
??
うーん。ちょっと調べてみます。

改善できたらまた追記しますね!

お礼日時:2011/06/15 14:49

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