C # Скрыть новую форму при запуске - PullRequest
3 голосов
/ 23 декабря 2009

У меня есть скрытая форма, которая загружает подчиненную форму, 2е форма должна быть скрыта также

Обратите внимание: я больше не пользуюсь

ShowInTaskbar = false; //  should be hidden too

и я больше всего смогу общаться между формами, если я использую (скрыть / увидеть), я не могу общаться до тех пор, пока он не станет видимым = true;

  this.SetParameterValueCallback += new SetParameterValueDelegate(ShowMain.SetParamValueCallbackFn);
        ShowMain.AddItemCallback = new AddItemDelegate(this.AddItemCallbackFn);
        //Showsub.Show();
        Showsub.Hide(); // not working

Я уже пробовал

this.Visible = false; // didnt work

 BeginInvoke(new MethodInvoker(delegate
            {
                Hide();
            })); // didnt work

base.SetVisibleCore(false); // didnt work, Im not able communicate between form

Ответы [ 6 ]

5 голосов
/ 23 декабря 2009

Я не очень понимаю, почему вы могли бы заставить это работать в одном, а не в другом. Чтобы предотвратить отображение формы при вызове метода Show (), необходимо переопределить метод SetVisibleCore. Возможно, вы можете использовать этот код:

private bool mAllowVisible = false;

public bool ReallyVisible {
  get { return mAllowVisible; }
  set {
    mAllowVisible = value;
    if (value) this.Visible = true;
  }
}

protected override void SetVisibleCore(bool value) {
  if (value && !IsHandleCreated) CreateHandle();  // Ensure Load event runs
  if (!ReallyVisible) value = false;
  base.SetVisibleCore(value);
}
3 голосов
/ 03 мая 2010

Для будущих гуглеров / искателей ...

Иногда вы хотите, чтобы форма была невидимой, но чтобы она думала, что она видима (например, элемент управления ReportViever не будет ничего визуализировать, если форма будет установлена ​​невидимой методом из выбранного ответа), или вы хотите отображать вторую форму при запуске программы в другом потоке и не хотеть раздражать пользователя миганием заголовка первой формы ...

Если это так, вы можете просто установить Opacity = 0 для события form_Load, и оно сработает. Это волшебное поведение Windows известно из Windows 2000 и очень помогает в некоторых случаях.

1 голос
/ 14 июля 2011

Альтернативная версия кода Ханса Пассанта - щелкнуть выключателем, как только произойдет первоначальное скрытие:

    private bool _hasHiddenInitially = false;

    protected override void SetVisibleCore(bool value)
    {
        if (value && !IsHandleCreated) CreateHandle(); // Ensure Load event runs
        if (!_hasHiddenInitially) value = false;
        base.SetVisibleCore(value);
        _hasHiddenInitially = true;
    }
1 голос
/ 23 декабря 2009

это то, как я делаю это в моей форме, если вы используете frm2.Hide (); это может сделать трикс

  private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            main_normal frm2 = new main_normal();
            this.Hide(); //Hides Form1

            frm2.ShowDialog(); //Displays main_normal

            this.ShowDialog(); //After the main_normal is closed, again displays Form1
        }
        catch (Exception ex)
        {
            //this.Show();
            MessageBox.Show(ex.Message, "wub wub Noe feilet men eg vet isje ka", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
1 голос
/ 23 декабря 2009

Может быть, я не понял проблему

Но если у вас есть какая-либо форма, вы можете скрыть ее, используя formobject.Visiable = false

Form m = new Form();
m.Visible = false;
0 голосов
/ 11 мая 2017
    public NewForm()
    {
        InitializeComponent();


        SetVisibleCore(false);


    }

    private bool setCore = false;

    protected override void SetVisibleCore(bool value)
    {
        base.SetVisibleCore(setCore ? value : setCore);
    }

Может быть, это поможет

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