1

現在、1 または 0 のいずれかである 10 文字を含む変数があり、それぞれが許可キーを表しています。

現在、プログラムに UAC パネルも組み込まれているので、そのキーに基づいて機能を有効/無効にすることで、誰が何をできるかを制御できるようにしたいと考えています。

キーの例は次のとおり1011001101です。

人々のキーを変更するためのコントロールは、10 個のチェックボックスのリストです。

たとえば1000000000、UAC のみを制御し、他のすべての機能は、UAC の対応するチェックボックスをオンにしてキーを更新することで有効にできます。

別のユーザーを選択したときに、許可キーに基づいてチェックボックスを自動的に埋める問題にどのようにアプローチすればよいですか?

注: これは、UAC パネルが現在どのように見えるかのスクリーンショットです。これは、フォームがどのように設定されているかを示すためのものです。

UAC パネル

編集:私がやろうとしていることの明確な例を皆さんに示す必要があると思ったので、この大規模なコードを書きました。私のプログラムでは次のようになります:

If Mid(pkeys, 1, 1) = "1" Then
            chkUAC.Checked = True
        End If
        If Mid(pkeys, 2, 1) = "1" Then
            chkPInv.Checked = True
        End If
        If Mid(pkeys, 3, 1) = "1" Then
            chkVInv.Checked = True
        End If
        If Mid(pkeys, 4, 1) = "1" Then
            chkCheck.Checked = True
        End If
        If Mid(pkeys, 5, 1) = "1" Then
            chkPMap.Checked = True
        End If
        If Mid(pkeys, 6, 1) = "1" Then
            chkVMap.Checked = True
        End If
        If Mid(pkeys, 7, 1) = "1" Then
            chkTele.Checked = True
        End If
        If Mid(pkeys, 8, 1) = "1" Then
            chkHeal.Checked = True
        End If
        If Mid(pkeys, 9, 1) = "1" Then
            chkDart.Checked = True
        End If
        If Mid(pkeys, 10, 1) = "1" Then
            chkWhiteList.Checked = True
        End If
4

3 に答える 3

0

このコードを変更するだけです

For x = 0 To 9
  If pkeys(x) = "1" Then
    cbList(x).Checked = True
  Else
    cbList(x).Checked = False
  End If
Next

このコードに

For x = 0 To 9
  cbList(x).Checked = (pkeys(x) = "1")
Next
于 2013-04-16T23:11:21.517 に答える
0

List(Of CheckBox)許可キーにビットがある順序で、各許可チェックボックスへの参照を保持する を作成します。

次に、OnSelectedIndexChangedイベントが発生したときに、選択したユーザーの許可キーを取得し、それを char 配列に変換します。

cbList[index].checked次に、現在の文字のブール値と等しい値を設定できるように、インデックス値を繰り返しながらその文字配列をループします。


次のようになります。

リストを次のように宣言します。

Dim cbList = New List(Of CheckBox)

どこかで初期化します:

With cbList

    .Add(chkUAC)
    .Add(chkPInv)
    .Add(chkVInv)
    .Add(chkCheck)
    .Add(chkPMap)
    .Add(chkVMap)
    .Add(chkTele)
    .Add(chkHeal)
    .Add(chkDart)
    .Add(chkWhiteList)

End With

次に、ループして、変更されたインデックスに割り当てます。

Protected Sub ddlUser_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddlUser.SelectedIndexChanged

    Dim i = 0

    For Each c In ddlUser.SelectedValue.ToCharArray

        cbList(i).Checked = c = "1"
        i += 1

    Next

End Sub
于 2013-04-16T20:41:29.620 に答える