Hallo,
ich bin gerade dabei, ein Server-Manager-Programm zu schreiben, das auch eine Benutzerverwaltung beinhaltet. Mein Problem bezieht sich auf mein Formular "Benutzer_bearbeiten".
Hier eine Vorschau:
Hier soll man, nachdem man einen Benutzer ausgewählt hat, die Zugriffsrechte auf angelegte Server verwalten können. Es gibt die Berechtigung "Steuerung" (Starten und Stoppen des Servers) sowie "Einstellungen" (Bearbeiten der Server-Configs). Die Berechtigung "Einstellungen" soll nur jemand bekommen können, der die Berechtigung "Steuerung" hat. Daher wird die Einstellungs-Checkbox aktiviert/deaktiviert, je nachdem ob die Steuerungs-Checkbox angeklickt ist oder nicht. Da natürlich die Anzahl der Server unterschiedlich ist, werden die Checkboxen dynamisch in einem Panel erstellt:
Funktion
Auf meinem Entwicklungs-PC (Win10Pro x64) funktioniert das auch einwandfrei. Wenn ich das Programm aber auf dem Server ausführe (Windows Server 2016 x64), auf dem es später laufen soll, wir beim Anklicken einer beliebigen Steuerungs-Checkbox immer nur die erste Einstellungs-Checkbox aktiviert oder deaktiviert. Ich gebe zu, ich habe zunächst einfach die Anwendung rüber kopiert, was natürlich nicht die feine Art ist, aber auch das Erstellen eines Releases und das Installieren auf dem Server zeigten das gleiche Verhalten.
Kann mir jemand sagen, warum das so ist, und wie das ich Problem gelöst bekomme?
Vielen Dank!
cya Igel
ich bin gerade dabei, ein Server-Manager-Programm zu schreiben, das auch eine Benutzerverwaltung beinhaltet. Mein Problem bezieht sich auf mein Formular "Benutzer_bearbeiten".
Hier eine Vorschau:
Hier soll man, nachdem man einen Benutzer ausgewählt hat, die Zugriffsrechte auf angelegte Server verwalten können. Es gibt die Berechtigung "Steuerung" (Starten und Stoppen des Servers) sowie "Einstellungen" (Bearbeiten der Server-Configs). Die Berechtigung "Einstellungen" soll nur jemand bekommen können, der die Berechtigung "Steuerung" hat. Daher wird die Einstellungs-Checkbox aktiviert/deaktiviert, je nachdem ob die Steuerungs-Checkbox angeklickt ist oder nicht. Da natürlich die Anzahl der Server unterschiedlich ist, werden die Checkboxen dynamisch in einem Panel erstellt:
VB.NET-Quellcode
- Private Sub Benutzer_bearbeiten_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- CbUserSelect.Items.Clear()
- For Each User As UserInfo In ProgramData.Users
- 'CbUserSelect.Items.Add(User.Username.ToString & " - " & User.SteamID.ToString)
- CbUserSelect.Items.Add(User.Username.ToString)
- Next
- For SrvNo As Integer = 0 To ProgramData.Servers.Count - 1
- If Controls.ContainsKey("TxtServerName" & ProgramData.Servers(SrvNo).ID) = False Then
- Dim txt As New TextBox
- txt.Name = "TxtServerName" & ProgramData.Servers(SrvNo).ID
- txt.ReadOnly = True
- txt.BorderStyle = BorderStyle.None
- txt.BackColor = Color.White
- txt.Text = ProgramData.Servers(SrvNo).Servername
- txt.TextAlign = HorizontalAlignment.Center
- txt.Font = New Font("Microsoft Sans Serif", 12.0, FontStyle.Regular)
- txt.Size = New Size(250, 30)
- txt.Location = Size.op_Explicit(New Size(8, 7 + SrvNo * 30))
- txt.Parent = PanServerSettings
- txt.Show()
- End If
- If Controls.ContainsKey("ChbServerCtrl" & ProgramData.Servers(SrvNo).ID) = False Then
- Dim chbCtrl As New CheckBox
- chbCtrl.Name = "ChbServerCtrl" & ProgramData.Servers(SrvNo).ID
- chbCtrl.AutoSize = True
- chbCtrl.Font = New Font("Microsoft Sans Serif", 12.0, FontStyle.Regular)
- chbCtrl.Location = Size.op_Explicit(New Size(300, 11 + SrvNo * 30))
- chbCtrl.Parent = PanServerSettings
- chbCtrl.Show()
- AddHandler chbCtrl.CheckedChanged, Sub() OnCheckedChanged(chbCtrl)
- End If
- If Controls.ContainsKey("ChbServerEdit" & ProgramData.Servers(SrvNo).ID) = False Then
- Dim chbEdit As New CheckBox
- chbEdit.Name = "ChbServerEdit" & ProgramData.Servers(SrvNo).ID
- chbEdit.AutoSize = True
- chbEdit.Font = New Font("Microsoft Sans Serif", 12.0, FontStyle.Regular)
- chbEdit.Location = Size.op_Explicit(New Size(407, 11 + SrvNo * 30))
- chbEdit.Parent = PanServerSettings
- chbEdit.Show()
- chbEdit.Enabled = False
- End If
- Next
- TxtSteamID.Enabled = False
- TxtUsername.Enabled = False
- ChbEnabled.Enabled = False
- ChbIsAdmin.Enabled = False
- PanServerSettings.Enabled = False
- End Sub
Funktion
OnCheckedChanged
:VB.NET-Quellcode
- Private Sub OnCheckedChanged(ByVal ChbCtrl As CheckBox)
- Dim SrvNo As Integer = CInt(ChbCtrl.Name.Substring(13))
- Dim ChbEdit As CheckBox = DirectCast(PanServerSettings.Controls("ChbServerEdit" & SrvNo), CheckBox)
- If ChbCtrl.Checked = False Then
- ChbEdit.Checked = False
- ChbEdit.Enabled = False
- Else
- ChbEdit.Enabled = True
- End If
- End Sub
Auf meinem Entwicklungs-PC (Win10Pro x64) funktioniert das auch einwandfrei. Wenn ich das Programm aber auf dem Server ausführe (Windows Server 2016 x64), auf dem es später laufen soll, wir beim Anklicken einer beliebigen Steuerungs-Checkbox immer nur die erste Einstellungs-Checkbox aktiviert oder deaktiviert. Ich gebe zu, ich habe zunächst einfach die Anwendung rüber kopiert, was natürlich nicht die feine Art ist, aber auch das Erstellen eines Releases und das Installieren auf dem Server zeigten das gleiche Verhalten.
Kann mir jemand sagen, warum das so ist, und wie das ich Problem gelöst bekomme?
Vielen Dank!
cya Igel