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

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

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

Re[2]: 数値と役割を関連付ける方法


(過去ログ 149 を表示中)

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

■86766 / inTopicNo.1)  数値と役割を関連付ける方法
  
□投稿者/ まりこ (1回)-(2018/03/13(Tue) 13:56:03)

分類:[.NET 全般] 

Sub aaa


With ComboBox1
.Items.Add("0, 音楽ファイル")
.Items.Add("1, 動画ファイル")
.Items.Add("2, テキストファイル")
.Text = .Items(0).ToString
End With

End Sub



Public Mode0 As Integer


Sub bbb

Mode0 = CInt(Val(Form1.ComboBox1.Text))

End Sub


Sub ccc

If Mode0 = 0 Then


ElseIf Mode0 = 1 Then


ElseIf Mode0 = 2 Then


End If



End Sub


というコードを書きました。
コンボボックスにファイルタイプを指定することで、
sub内で処理をif文で分岐させるコードです。

ファイルタイプが3つ程度だとそれほど問題はないのですが
10個も20個にもなってくると、
数値8は何のファイルタイプだったっけ・・・?
といちいち確認する必要があり、面倒です。
文字列変数に入れて分岐させた方が便利ではありますが、
多少、処理に時間がかかりますし、
後からコードを変えるの面倒なので、
Integerを使いたいと考えています。

このIntegerとファイルタイプ名を関連付ける方法があれば
お教えください。


引用返信 編集キー/
■86767 / inTopicNo.2)  Re[1]: 数値と役割を関連付ける方法
□投稿者/ 魔界の仮面弁士 (1587回)-(2018/03/13(Tue) 14:16:35)
No86766 (まりこ さん) に返信
> .Items.Add("0, 音楽ファイル")
> .Items.Add("1, 動画ファイル")
> .Items.Add("2, テキストファイル")
> Mode0 = CInt(Val(Form1.ComboBox1.Text))

こういう方法は如何でしょう。

Public Enum FileType As Integer
  音楽ファイル = 0
  動画ファイル = 1
  テキストファイル = 2
End Enum

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  ComboBox1.DataSource = [Enum].GetValues(GetType(FileType))
End Sub

Friend Mode0 As FileType
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
  Mode0 = ComboBox1.SelectedValue
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  Select Case Mode0
    Case FileType.音楽ファイル
    Case Else
  End Select
End Sub
引用返信 編集キー/
■86775 / inTopicNo.3)  Re[2]: 数値と役割を関連付ける方法
□投稿者/ にゃるら (6回)-(2018/03/14(Wed) 16:16:56)
魔界の仮面弁士さんの回答が適切だと思います!

でも私はひねくれているので、別の回答案をむりくり作りました。
これなら、追加されるファイルごとに処理も合わせて分離できるかと思います。

Public Class Form1

	Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
		ComboBox1.DataSource = New Command() {
			New MusicFileCommand(),
			New MovieFileCommand(),
			New TextFileCommand()
			}
	End Sub

	Private SelectCommand As Command

	Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
		SelectCommand = ComboBox1.SelectedItem
	End Sub

	Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
		If SelectCommand IsNot Nothing Then
			SelectCommand.Execute()
		End If
	End Sub

End Class

Public Class Command
	Protected Sub New(ByVal name As String)
		Me.Name = name
	End Sub

	''' <summary>
	''' 名前
	''' </summary>
	''' <returns></returns>
	Public ReadOnly Property Name As String

	''' <summary>
	''' 実行処理
	''' </summary>
	Public Overridable Sub Execute()
		' 派生クラスで何か実行することを行うので、特になんもしなくてよい
	End Sub

	''' <summary>
	''' ToString()
	''' </summary>
	''' <remarks>
	''' コンボボックスで文字列が出るようにするために継承しておきます
	''' </remarks>
	''' <returns></returns>
	Public Overrides Function ToString() As String
		Return Me.Name
	End Function
End Class

Public Class MusicFileCommand : Inherits Command
	Public Sub New()
		MyBase.New("音楽ファイル")
	End Sub

	Public Overrides Sub Execute()
		' TODO: 音楽ファイルを○○する処理を実装する
	End Sub
End Class


Public Class MovieFileCommand : Inherits Command
	Public Sub New()
		MyBase.New("動画ファイル")
	End Sub

	Public Overrides Sub Execute()
		' TODO: 動画ファイルを○○する処理を実装する
	End Sub
End Class

Public Class TextFileCommand : Inherits Command
	Public Sub New()
		MyBase.New("テキストファイル")
	End Sub

	Public Overrides Sub Execute()
		' TODO: テキストファイルを○○する処理を実装する
	End Sub
End Class


引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -