Открыть форму динамически, если имя пользователя имеет определенные привилегии - PullRequest
0 голосов
/ 14 октября 2018

У меня есть несколько разных форм.Пользователь, который запускает программу с определенной привилегией, которую я извлекаю из базы данных, просто открывает конкретную форму, соответствующую этому разрешению, не получая никаких опций.

Применяется к заставке при запуске, которая выглядит ниже вprogram.cs:

        static SplashScreen mySplashForm;
        static Mainview myMainForm;
        mySplashForm = new SplashScreen();
        if (mySplashForm != null)
        {
            Thread splashThread = new Thread(new ThreadStart(
                () => { Application.Run(mySplashForm); }));
            splashThread.SetApartmentState(ApartmentState.STA);
            splashThread.Start();
        }
        //Create and Show Main Form
        myMainForm = new Mainview();
        myMainForm.LoadCompleted += MainForm_LoadCompleted;
        Application.Run(myMainForm);
        if (!(mySplashForm == null || mySplashForm.Disposing || mySplashForm.IsDisposed))
            mySplashForm.Invoke(new Action(() => {
                mySplashForm.TopMost = true;
                mySplashForm.Activate();
                mySplashForm.TopMost = false;
            }));
    }
    private static void MainForm_LoadCompleted(object sender, EventArgs e)
    {
        if (mySplashForm == null || mySplashForm.Disposing || mySplashForm.IsDisposed)
            return;
        mySplashForm.Invoke(new Action(() => { mySplashForm.Close(); }));
        mySplashForm.Dispose();
        mySplashForm = null;
        myMainForm.TopMost = true;
        myMainForm.Activate();
        myMainForm.TopMost = false;
    }

У меня нет вида для входа в систему, и он идентифицирует пользователя только по имени для входа в систему на компьютере с помощью следующего кода:

        public static string username = System.Environment.UserName;
        bool has = agents.Any<AgentItem>(uID => uID.UserId == username && uID.SmeCord == "y");
        if (has == true)

Есть ли хороший способполучить более динамичный способ открывать формы с самого начала.Поэтому мне не нужно использовать «статический Mainview myMainForm;»или необходимо открыть форму, а затем «this.hide ();»?

Попытка связать новую форму, когда bool имеет значение true для myMainForm, чтобы она загружала правильную форму.Без какого-либо успеха.Последние попытки: я сделал следующее и все еще без прогресса.

            bool has = agents.Any<AgentItem>(uID => uID.UserId == username && uID.SmeCord == "y");
        if (has == true)
        {
            Mainview myMainForm;
                            mySplashForm = new SplashScreen();
        if (mySplashForm != null)
        {
            Thread splashThread = new Thread(new ThreadStart(
                () => { Application.Run(mySplashForm); }));
            splashThread.SetApartmentState(ApartmentState.STA);
            splashThread.Start();
        }
        //Create and Show Main Form
        myMainForm = new Mainview();
        myMainForm.LoadCompleted += MainForm_LoadCompleted;
        Application.Run(myMainForm);
        if (!(mySplashForm == null || mySplashForm.Disposing || mySplashForm.IsDisposed))
            mySplashForm.Invoke(new Action(() => {
                mySplashForm.TopMost = true;
                mySplashForm.Activate();
                mySplashForm.TopMost = false;
            }));
        }

Но тогда я все равно не смогу его запустить, так как функция MainForm_LoadCompleted ().

На данный момент у меня естьчетыре разные формы, которые я хочу открыть в зависимости от имеющихся у вас привилегий.

Некоторое время искали, но не смогли найти то, что может мне помочь.

Как мне решитьэто правильно?

1 Ответ

0 голосов
/ 14 октября 2018

Я склоняюсь к организации таких приложений, как:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...