Как я поддерживаю пользовательские данные для входа в систему в приложении Winforms?

Вот мое решение (В Ruby)

def spiral(xDim, yDim)
   sx = xDim / 2
   sy = yDim / 2

   cx = cy = 0
   direction = distance = 1

   yield(cx,cy)
   while(cx.abs <= sx || cy.abs <= sy)
      distance.times { cx += direction; yield(cx,cy) if(cx.abs <= sx && cy.abs <= sy); } 
      distance.times { cy += direction; yield(cx,cy) if(cx.abs <= sx && cy.abs <= sy); } 
      distance += 1
      direction *= -1
   end
end

spiral(5,3) { |x,y|
   print "(#{x},#{y}),"
}
5
задан Robert Harvey 18 February 2011 в 16:13
поделиться

7 ответов

В формах Windows нет понятия переменных сеанса. Что вы можете сделать:

  1. Создайте внутренний класс, содержащий имя пользователя и пароль, а также любые другие переменные и перечисления, необходимые для всего приложения (что-то вроде Common.cs). К ним можно получить доступ через общедоступные свойства в приложении.

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

6
ответ дан 14 December 2019 в 01:13
поделиться
public class MyForm : Form
{
     private string userName;
     private string password;
}

Поскольку формы Windows поддерживают состояние (в отличие от форм без состояния для веб-форм), вы можете просто использовать поле в своем классе формы.

4
ответ дан 14 December 2019 в 01:13
поделиться

В winforms вы можете использовать переменные, которые доступны другим формам через методы или свойства.

Вы также можете использовать статические переменные .

1
ответ дан 14 December 2019 в 01:13
поделиться

В следующем примере у вас будет контроллер для каждого окна или группы окон. Контроллеры будут передаваться друг другу в зависимости от того, как им нужно сотрудничать (какими знаниями им нужно поделиться и т. Д.). Важно сохранить состояние вашего приложения в контроллерах и ограничить окна обработкой пользовательского ввода и событий.

// pseudocode, because I do not know WinForms that much
class MainController
{
    private Guid securityToken;

    public Guid SecurityToken
    {
        get { return securityToken; }

        set { securityToken = value; }
    }
}

class LoginWindowController
{
    MainController mainController;
    LoginWindow    loginWindow;

    public LoginWindowController(MainController mainController)
    {
        this.loginWindow    = new LoginWindow(this);
        this.mainController = mainController;
    }

    public void Show()
    {
        loginWindow.IsVisible = true;
    }

    public void HandleLogin()
    {
        Guid token = 
            myobject.Authenticate(loginWindow.Username, loginWindow.Password);

        if (token != Guid.Empty)
        {
            mainController.SecurityToken = token;
        }   
    }
}
1
ответ дан 14 December 2019 в 01:13
поделиться

В ответ на ваш комментарий к моему первому ответу:

Вы создаете новый экземпляр формы входа. Как это должно иметь ценности. Это форма входа в систему, и поэтому я считаю, что вы закроете ее, когда пользователь введет имя пользователя и пароль и нажмет «ОК» или что-то еще.

Тогда вы не сможете получить значения из формы входа, поскольку она закрыта. . Если вам нужно придерживаться этого подхода, это может быть выход:

  1. Не закрывайте форму входа в систему, просто скройте ее.
  2. Передать текущий экземпляр в следующую форму. Нравится: В форме входа:

    NextForm nxt = new NextForm (this);

Конструктор NextForm будет выглядеть так:

public NextForm(LoginForm frm){
// Code here
}

Теперь в NextForm вы можете получить доступ к свойствам через «frm».

0
ответ дан 14 December 2019 в 01:13
поделиться

На основании одного из ваших ответов мне непонятно, говорите ли вы о веб-приложении или о поддерживающем приложении. Если вы говорите о веб-приложении, вы можете использовать свойства Session для объекта Page.

Он установит такие переменные:

Session["username"] = "Username";
Session["fullname"] = "User's full name";

Затем вы можете получить доступ, например:

lblGreetings.Text = "Hi " + Session["fullname"];

Это то, что вам нужно?

-3
ответ дан 14 December 2019 в 01:13
поделиться

Вам нужно больше думать о области , чем о сеансе; пока объект остается в области видимости, вы сможете извлекать значения из его общедоступных свойств / полей.

В вашем случае имеет смысл хранить данные пользователя в статическом классе:

public static class LoginInfo
{
    public static string UserID;
}

Теперь вы можете получить доступ к UserID просто из любого места в вашем коде:

MessageBox.Show(LogInfo.UserID);
1
ответ дан 14 December 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: