C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: リストボックの検索について


(過去ログ 78 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■46023 / inTopicNo.1)  リストボックの検索について
  
□投稿者/ Surarin (3回)-(2010/01/23(Sat) 15:26:58)

分類:[VB.NET/VB2005 以降] 

先日はありがとうございました。
再び質問させていただきます。

VB.NET 2008 Express Editionを使っています

リストボックス内を検索する際、予め決めておいたID(プログラム内にはラベルで表示させてあるだけです)をテキストボックスに入力すると、IDが表示されるように
プログラムを組みました。

Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text = (13) Then
            ListBox1.SetSelected(0, True)
        ElseIf TextBox1.Text = (1) Then
            ListBox1.SetSelected(1, True)

このようにID13を入力してボタン1をクリックするとリストボックの0番目が選択されるようになったのですが、
空白または数字以外のものを入力してボタン1を押すとエラーが出てしまいます。

IDは0と19以降の数字は使っていません。それ以外の文字・数字が入力されたらメッセージボックスを使って警告したいのですが、
どのように入力すればよろしいのでしょうか?

引用返信 編集キー/
■46026 / inTopicNo.2)  Re[1]: リストボックの検索について
□投稿者/ Jitta (626回)-(2010/01/23(Sat) 16:52:04)
No46023 (Surarin さん) に返信
> If TextBox1.Text = (13) Then
> ElseIf TextBox1.Text = (1) Then
>
 これがどういう意味を持っているか、特に「TextBox1.Text= (13)」がどういう意味を持っているか、まず、調べてください。


 あと、エラーが出るときは、どこでどのようなエラーが出るか、きっちり書いてください。
まぁ、今回は上の If の行で、空白を数字に変換できない、みたいなエラーだと思いますけど。
引用返信 編集キー/
■46027 / inTopicNo.3)  Re[2]: リストボックの検索について
□投稿者/ Surarin (4回)-(2010/01/23(Sat) 17:10:59)
No46026 (Jitta さん) に返信
> ■No46023 (Surarin さん) に返信
>>        If TextBox1.Text = (13) Then
>>        ElseIf TextBox1.Text = (1) Then
>>
>  これがどういう意味を持っているか、特に「TextBox1.Text= (13)」がどういう意味を持っているか、まず、調べてください。
> 
> 
>  あと、エラーが出るときは、どこでどのようなエラーが出るか、きっちり書いてください。
> まぁ、今回は上の If の行で、空白を数字に変換できない、みたいなエラーだと思いますけど。

エラーは以下のとおりです

System.InvalidCastException はハンドルされませんでした。
  Message="String "" から型 'Double' への変換は無効です。"
  Source="Microsoft.VisualBasic"
  StackTrace:
       場所 Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat)
       場所 Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value)
       場所 IVMP_Weapons_sID_viewbar.Form1.Button1_Click_1(Object sender, EventArgs e) 場所 C:\Documents and Settings\OOO\デスクトップ\VB\test004\test004\idvw.vb:行 484
       場所 System.Windows.Forms.Control.OnClick(EventArgs e)
       場所 System.Windows.Forms.Button.OnClick(EventArgs e)
       場所 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       場所 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       場所 System.Windows.Forms.Control.WndProc(Message& m)
       場所 System.Windows.Forms.ButtonBase.WndProc(Message& m)
       場所 System.Windows.Forms.Button.WndProc(Message& m)
       場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       場所 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       場所 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       場所 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       場所 System.Windows.Forms.Application.Run(ApplicationContext context)
       場所 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
       場所 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
       場所 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       場所 IVMP_Weapons_sID_viewbar.My.MyApplication.Main(String[] Args) 場所 17d14f5c-a337-4978-8281-53493378c1071.vb:行 81
       場所 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       場所 System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
       場所 System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
       場所 System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
       場所 System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
       場所 System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
       場所 System.Activator.CreateInstance(ActivationContext activationContext)
       場所 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
       場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       場所 System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.FormatException
       Message="入力文字列の形式が正しくありません。"
       Source="Microsoft.VisualBasic"
       StackTrace:
            場所 Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
            場所 Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat)
       InnerException: 


TextBox.Text はテキストを設定するものだから、間違っているのでしょうか・・・?

引用返信 編集キー/
■46030 / inTopicNo.4)  Re[3]: リストボックの検索について
□投稿者/ もりお (170回)-(2010/01/23(Sat) 18:44:19)
2010/01/23(Sat) 19:58:39 編集(投稿者)
No46027 (Surarin さん) に返信

> If TextBox1.Text = (13) Then
TextBox1.Text は String 型
13 は Integer 型
異なる型の比較を行うため暗黙的な型変換が行われます。
数字以外の文字列が入力された場合は型変換に失敗するために例外が発生します。

対策としては

例外の種類は System.InvalidCastException だとわかったので、これを捕まえる。
Try
	If TextBox1.Text = 13 Then
		ListBox1.SelectedIndex = 0
	End If
Catch ex As InvalidCastException
	MessageBox.Show("変換できないですよー")
	Return
End Try

試験的な型変換を行って例外を捕まえる。
Try
	Integer.Parse(TextBox1.Text)
Catch ex As System.FormatException
	MessageBox.Show("変換できないですよー")
	Return
End Try

If TextBox1.Text = 13 Then
	ListBox1.SelectedIndex = 0
End If

型変換を行う前に予測する。
If TextBox1.Text = "" Then
	MessageBox.Show("変換できないですよー")
	Return
End If

If Regex.IsMatch(TextBox1.Text, "[^0-9]") Then
	MessageBox.Show("変換できないですよー")
	Return
End If

If TextBox1.Text = 13 Then
	ListBox1.SelectedIndex = 0
End If

引用返信 編集キー/
■46034 / inTopicNo.5)  Re[4]: リストボックの検索について
□投稿者/ Jitta on the way (529回)-(2010/01/23(Sat) 21:06:37)
No46030 (もりお さん) に返信

> If TextBox1.Text = "13" Then

でいいじゃん、と思ってたんだけど、やっぱダメかな。仕様がわかんないからね。



で、せっかく「何故、間違っているのか」を教えてくれているのだから、きちんと読んで、考えてください>質問者さん
引用返信 編集キー/
■46035 / inTopicNo.6)  Re[5]: リストボックの検索について
□投稿者/ Surarin (5回)-(2010/01/23(Sat) 21:13:35)
ありがとうございました。
じっくりと読ませてもらいます。
解決済み
引用返信 編集キー/
■46037 / inTopicNo.7)  Re[5]: リストボックの検索について
□投稿者/ もりお (171回)-(2010/01/23(Sat) 21:16:02)
2010/01/23(Sat) 21:41:34 編集(投稿者)

No46034 (Jitta on the way さん) に返信
> If TextBox1.Text = "13" Then
>
> でいいじゃん、と思ってたんだけど、やっぱダメかな。
ぐあっ...気付きませんでした。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -