例えば、UserA には変更ボタンを押させるが、UserB には閲覧しか認めないとか。
色々な実装方法があるかとは思いますが、ここでは一例を示します。
クラスをひとつ設けて、コントロールの表示や入力の可否をユーザー名毎に設定するやり方です。
先ず、Form に以下のコントロールを貼り付けて下さい。
Label 1
Label 2
ComboBox1
Button1
Button2
TextBox1
制御するのは、Button1 と TextBox1 です。
これ以外は、挙動の確認用 もしくは クラスの機能説明用です。
さて、コードです。
Button1 と TextBox1 の制御用のクラス
Public Class ControlUsers
Public appUser As String = System.Environment.GetEnvironmentVariable("UserName")
Public IsUseForm1Button1 As Boolean
Public IsUseForm1Textbox1 As Boolean
'Set IsUseXxx Controls
Public Sub New()
Initialize()
End Sub
Public Sub Reset(ByVal anotherUser As String)
appUser = anotherUser
Initialize()
End Sub
Private Sub Initialize()
Select Case appUser
Case "Taro"
IsUseForm1Button1 = True
IsUseForm1Textbox1 = True
Case "Jiro"
IsUseForm1Button1 = False
IsUseForm1Textbox1 = False
Case "Saburo"
IsUseForm1Button1 = True
IsUseForm1Textbox1 = False
Case Else
IsUseForm1Button1 = False
IsUseForm1Textbox1 = False
End Select
End Sub
End Class
実際に制御されるクラス ( Form1 )
Public Class Form1
Dim userLevel As New ControlUsers
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'for sumple
Me.ComboBox1.Items.Add("Taro")
Me.ComboBox1.Items.Add("Jiro")
Me.ComboBox1.Items.Add("Saburo")
Me.ComboBox1.SelectedIndex = 0
Me.Button2.Text = "AnotherUse"
'status
Me.Label1.Text = userLevel.appUser
Me.Label2.Text = userLevel.appUser
'set form controls
Me.Button1.Enabled = userLevel.IsUseForm1Button1
Me.TextBox1.Visible = userLevel.IsUseForm1Textbox1
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
userLevel.Reset(Me.ComboBox1.Text)
Me.Label2.Text = userLevel.appUser
Me.Button1.Enabled = userLevel.IsUseForm1Button1
Me.TextBox1.Visible = userLevel.IsUseForm1Textbox1
End Sub
End Class
Form1 の実行画面です。 あっ、ユーザー名の部分は画像訂正してます、ハイ。
Form1 を実行すると、私のユーザー名が ControlUsers クラスで指定した設定用ユーザー名 Taro/Jiro/Saburo ではないので、
最後の Else 扱いで画面が表示されます。
ComboBox1 で別の名前を選択し、Button2 を押すと、その資格で画面が再表示されます。
う~~~、Form1 の画面構成、失敗 ! TextBox1 と Button1 & Label2 を離れたままに ... 分りずらぁ ... 。
これじゃぁ、真ん中を操作して、その上下が変わるので、 やはり、分りずらぁ ... 。 直す元気なく消沈。 ご勘弁を。
この例では、設定用ユーザー名と実際のユーザー名は 1:1 対応ですが、
設定用ユーザー名の代わりに、所属するグループ名の定義を加え、1: 多 対応の定義に変える事も可能でしょう。
また、この例では、コード内に直接、設定用ユーザー名と画面制御の可否を定義していますが、
この様なハードコードから 別の方法に切り替える事 も出来ますね。 説明用に、分り易く、ハードコードで書いてます。
また、Form の各種コントロールのプロパティも、.Enabled や .Visible 以外に、.ReadOnly 等にも使えますね。 例: DataGridView 。
おっと、それから、この例は、説明用なので Form1.vb の中に、ふたつのクラスを入れていますが、
別ファイルとして分離する方が望ましいでしょう。
この例の考え方を基に、色々と、変えて見て下さい。
0 件のコメント:
コメントを投稿