投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/11/30 16:38:44
> login-id をlogin list でも使いたい

マイナス記号を含むメンバー名は定義できません。

大文字小文字を混ぜた PascalCase 表記で
  Public LoginId As String
のようにするか、あるいはアンダーバーを用いた SNAKE_CASE 表記で
  Public LOGIN_ID As String
のようにすることで代用してみてください。


> クラスを跨いで共通の変数を作成したいです。

それぞれのクラスインスタンスが、単一生成なのか複数個生成されるものなのか、
また、各クラスのインスタンスをどこで管理しているかによっても、
また話が変わってくるわけですが、おおよそ、下記のような手法が思いつきます。

案1) シングルトン クラスを用意してアクセスするようにする
案2) クラスのインスタンス メンバーではなく、クラスの共有(Shared)メンバーを用意する
案3) クラス(Class)の代わりにモジュール(Module)を使ってやり取りする


たとえば 案2 の例。
Login クラスを下記のような実装にしてみた場合…

Public Class Login
    Public Shared Property Id As String
End Class


画面1から「Login.Id = "ケンケン"」と設定して、
それを list クラス内で利用したり、あるいは
画面2で「Label1.Text = Login.Id」のようにして
取り出したりすることができます。

ただしこの場合、ログインID をどこからでも自由に改竄できる点に注意が必要です。


処理内容によっては、認証情報を独自あるいは既存の IPrincipal 実装に保持して、
My.User オブジェクトに保持させるという選択肢もあります。

My.User.CurrentPrincipal = New System.Security.Principal.GenericPrincipal(
           New System.Security.Principal.GenericIdentity("ケンケン""Example"),
           New String() {"投稿者""質問者"})


この時、保存先とした My.User はプロジェクト内のどこからでも利用可能なプロパティであり、
別画面などで
 Label1.Text = My.User.Name  'ケンケン
 If My.User.IsInRole("管理者") Then  'False
 ElseIf My.User.IsInRole("質問者") Then  'True
のようにして利用できます。