• 締切済み

VB2010ユーザーコントロール

お世話になります。 VB2010でユーザーコントロールのテキストボックスを作成しました。 昨日としては簡単で (1)フォーカスが当たった場合、テキストボックスの背景色の色を変える。 (2)文字を全選択する。 Protected Overrides Sub OnEnter(ByVal e As System.EventArgs) Me.BackColor = SettingsInfo.FocusColor '(1) Me.SelectAll() '(2) MyBase.OnEnter(e) End Sub 上記のようにコードを書いた場合、(1)は正常に動くのですが (2)で文字が全選択されません。 原因を教えていただければ幸いと存じます、宜しくお願い致します。

みんなの回答

noname#185525
noname#185525
回答No.1

HideSelectionをFalseにしてください。

関連するQ&A

  • VB.NET フォーカスの位置をしる方法

    VB.NETにてWindowsMobile5.0の開発をしております。 下記のようにテキストボックスにフォーカスがきたら色を変える処理をしてますが、 テキストボックスがたくさんある場合どこがフォーカスされているか知ってテキストボックスなら色を変えると言う処理にしたいです。 何卒、ご教授のほどよろしくお願いします。 Private Sub T_ATO_GetFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles T_ATO.GotFocus T_ATO.BackColor = Color.Aqua TextBox_ENT.Text = T_ATO.Text End Sub Private Sub T_ATO_LostFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles T_ATO.LostFocus T_ATO.BackColor = Color.White End Sub

  • デザイナ時のエラー「オブジェクト参照が…」??

    お世話になります。 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

  • VB添削

    このプログラムは 例えば3 3 4とテキストボックスに数字が打ち込まれると 3×3行列が4個分 のテキストボックスがでてきます。 ここに数字を打ち込んでいき、ボタン2を押すと3×3のテキスト トボックスが出てくると同時に足し算した結果が出てくるようにしたいです。 以下のプログラムはできたところまで作成しています。 どこを直せばよいのでしょうか。 Public Class Form1 Private number As Integer Private rows As Integer Private columns As Integer Private Sub Form11_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For i As Integer = 1 To 3 AddHandler Me.Controls("TextBox" & i).TextChanged, AddressOf TextBox_TextChanged Next End Sub Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) If System.Text.RegularExpressions.Regex.IsMatch(CType(sender, TextBox).Text, "[^0-9]") Then MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) With CType(sender, TextBox) .Text = .Text.Substring(0, .Text.Length - 1) .SelectionStart = .Text.Length End With End If Dim cnt1 As Integer Dim cnt2 As Integer Dim cnt3 As Integer If Integer.TryParse(TextBox1.Text, cnt1) And Integer.TryParse(TextBox2.Text, cnt2) And Integer.TryParse(TextBox3.Text, cnt3) Then For k = 1 To cnt3 For i = 1 To cnt1 For j = 1 To cnt2 Dim tb As TextBox = New TextBox() tb.Name = "tb" + i.ToString() Me.Controls.Add(tb) tb.Top = (i - 1) * 28 + 55 tb.Left = (j - 1) * 30 + 40 * (cnt2 * (k - 1)) + 10 tb.Width = 25 Next Next Next End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Bounds = New Rectangle(10, 10, 1350, 800) Me.AutoScroll = True End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim sum As Double Dim cnt As Integer = 0 For i As Integer = 1 To rows For j As Integer = 1 To columns Dim tb As TextBox = New TextBox() cnt += 1 : If cnt > rows * columns Then cnt = 1 tb.Name = "tb" + cnt.ToString Me.Controls.Add(tb) tb.Top = (i - 1) * 30 + (80 + 40 * rows) tb.Left = (j - 1) * 60 + 10 tb.Width = 40 sum = 0 For k As Integer = 1 To number sum += Double.Parse(CType(Me.Controls("tb" + (cnt + (rows * columns * (k - 1))).ToString()), TextBox).Text) Next tb.Text = sum.ToString() Next Next End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub End Class

  • VB.NET 自作プロパティが変更されたらイベント

    お世話になります。 ご回答宜しくお願いします。 現在VBでDLLプログラムを開発しております。 以下簡単な仕様です。 DLLで自作のプロパティ( SelectedFlg )と、 SelectedFlgが変更された時に発生するイベントを追加しました。 親システムからVBのDLLを呼び出し、親システムがSelectedFlgの値を変更すると DLL内でイベントを感知し、処理をするというような感じです。 例えば、親システムへDLLをパネルとして2つ( A , B )貼り付け Aをクリックすると、AのSelectedFlgをTrueに、BのSelectedFlgをFalseにして Trueの方はBackColorを赤、Falseの方はBackColorを白 のような形にしたいと考えてます。 しかし、実行してみると BackColorが反映されるのは、初期値を設定した時の1度のみでした。 その後クリックしても、BackColorが変化することはありません。 どこか間違いや思い違いがあるんでしょうか。 以下コードになります。  ・・・OriginalControlクラス・・・ Public Class OriginalControl   Public Event SelectedValueChanged(ByVal sender As Object, ByVal e As EventArgs)   Protected Sub OnSelectedValueChanged(ByVal e As EventArgs)     RaiseEvent SelectedValueChanged(Me, e)   End Sub   Public Property SelectedFlg() As Boolean     Get       Return m_SelectedFlg     End Get     Set(ByVal value As Boolean)       m_SelectedFlg = value       Me.OnSelectedValueChanged(New EventArgs)     End Set   End Property   Private m_SelectedFlg As Boolean End Class ・・・Panel・・・ OriginalControlクラスを継承したControl ( 省略 )     Private Sub Panel_SelectedValueChanged(ByVal sender As System.Object,                               ByVal e As System.EventArgs)                               Handles MyBase.SelectedValueChanged       If Me.SelectedFlg = True Then         setBackColor( Color.Red )       Else         setBackColor( Color.White )       End If     End Sub

  • vbのsavefiledialogについて

    vbで、テキストボックスに、文字を入力し、ボタン2をクリックすると、ユーザーが指定したところに、指定した名前で、txt形式、html形式、doc形式(このうち、txtと、htmlは必須。)で保存するプログラムを作りたいと思っております。 サイトを見てみますが、なかなかよいものが見つかりません。どなたか教えてください。 書きかけのプログラムと、フォーム図を載せておきます。 また、変更した方がよければ、そちらもおしえてください。 Public Class Form1 Dim texta As String Dim a Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Button1.Text = "リセット" Button2.Text = "保存" texta = TextBox1.Text End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged texta = TextBox1.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = "" End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click a = DialogResult SaveFileDialog1.OverwritePrompt = True SaveFileDialog1.FileName = "" SaveFileDialog1.Filter = "テキストファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*" a = SaveFileDialog1.ShowDialog If a = Windows.Forms.DialogResult.OK Then Label1.Text = IO.Path.GetDirectoryName(SaveFileDialog1.FileName) Label2.Text = IO.Path.GetFileName(SaveFileDialog1.FileName) Else Label1.Text = "キャンセルされました。" Label2.Text = "" End If End Sub End Class

  • VB2005 のイベントについて

    いつもお世話になっています。 OS:Windows 2000 言語:VB2005 Express Edition で作成しているのですが、イベントの質問があります。 TextBoxのフォーカスを取得した時に、 そのTextBoxに設定されている文字列を選択させようと思い TextBoxのEnterイベントでSelectAllをしているのですが、 この場合ですと、マウスでクリック選択した時には文字列が選択されません。 Private Sub txt_id_Enter(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles txt_id.Enter txt_id.SelectAll() End Sub VB6.0 では Private Sub txt_id_GotFocus txt_id.SelStart = 0 txt_id.SelLength = Len(ob_Textbox.Text) End Sub 上記の通り、GotFocusイベントを使用しており、Tabキーでフォーカス取得していた時も マウスで選択している時も変わらず文字列は選択されていました。 VB2005のGotFocusイベントでは、一旦選択されるのですが すぐに選択は解除されてしまうのです。 他にVB6.0のGotFocusと同等のイベントや、対応策などありませんでしょうか? よろしくおねがいいたします。

  • 続・タイマーとShowdialog(VB2010)

    タイマーコントロールについて の続きになります。 一つ方法を考えました。いくつか問題ありですが・・。 ApplicationEvent.vbの部分を Namespace My Partial Friend Class MyApplication Protected Overrides Function OnInitialize( _ ByVal commandLineArgs As _ System.Collections.ObjectModel.ReadOnlyCollection(Of String) _ ) As Boolean 'スプラッシュウィンドウを表示する最短時間を0.5秒にする Me.MinimumSplashScreenDisplayTime = 500 Return MyBase.OnInitialize(commandLineArgs) End Function      'スプラッシュスクリーンのタイマーコントロール設定 Friend Sub Splash() With SplashScreen1.Timer1 .Enabled = True .Interval = 500 End With SplashScreen1.Timer1.Start() End Sub ' この書き方あってますか?とりあえずは反映されてるようですけれど・・・ End Class End Namespace SplashScreen1の部分を Public Class SplashScreen1 Friend Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click     ' クリックで閉じる DialogResult = DialogResult.OK Me.Close() End Sub Friend Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick ' タイマーコントロール発動時、瞬時に停止させる。スクリーンは消えないように。 Me.Timer1.Enabled = False Me.ShowDialog() End Sub End Class と、してみましたが・・・問題が発生するのです。 この時、スクリーンフォームがMe.ShowDialog()と書いてあるにもかかわらず、 メインフォームとともに操作可能・・つまりモードレスであるShowで表示されるのです。上記のコードを実行してもらえれば分かると思いますが・・。 また、メインフォームが前方に、スクリーンフォームが後方に行ってしまいます。これはどのようにすれば良いでしょうか? Me.TopMost = True としても駄目でした。 BringToFrontを使っても同じでした。

  • 簡単なプログラムにまとめる方法

    前回、同じようなプログラムを簡単にまとめる方法を教えて頂いたのですが新しい事で困ってしまいました。 説明が非常にへたくそなので、プログラムをそのまま書きます・・・・ スイマセン Private Sub TextBox1_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1_1.GotFocus Me.TextBoxNum.Text = "1" End Sub Private Sub TextBox2_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2_1.GotFocus Me.TextBoxNum.Text = "2" End Sub Private Sub TextBox3_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox3_1.GotFocus Me.TextBoxNum.Text = "3" End Sub 上記のプログラム、TextBox○○○_1.KeyPressの○○○の部分が1から100まであるのですが、あまりにも行数が多くなって長くなるので、以下のプログラムで纏めたのですが、 Me.TextBoxNum.Text = "○○○" にフォーカスされたTextBox○○○_1の○○○を入れる方法はありますか? Private Sub TextBox1_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1_1.GotFocus,TextBox2_1.GotFocus,TextBox3_1.GotFocus Me.TextBoxNum.Text = "○○○" End Sub 説明が下手くそでスイマセン、ほかに新しい方法でも有ればお願いします よろしくお願いしますm(__)m

  • Overloads Overrides とは?

    VB2005 で、派生クラスで「Overloads Overrides ・・・」と2つキーワードを付けたコードを見かけることがあります。 例えば、基本クラスで Dispose メソッドを実装していて、そのクラスを継承する場合に... Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)   MyBase.Dispose(disposing) End Sub となってたりします。 Overrides はオーバーライドするんだな、と意味が分かりますが、この場合の Overloads にはどういう意味があるんでしょうか?

  • データベースを更新したい(VB2008)

    VB2008でつくったアプリケーションでAccessのデータを更新したいです。DataGridView1でデータを表示させ更新ボタン押下時にデータ(Accessのテーブル)を更新したいです。 DataGridView1でデータを表示することはできましたが、「更新」押下に更新されません。 Accessのテーブル名は「01データです」 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me._01データTableAdapter.Fill(Me.年賀状DataSet._01データ) End Sub Private Sub 更新_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 更新.Click With DataGridView1 .Update()     End With     MsgBox("更新しました") End Sub

専門家に質問してみよう