На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (3) 1 2 [3]  все  ( Перейти к последнему сообщению )  
> Модальная форма
    Цитата archimed7592 @
    тем, что, во-первых, я не определяю метода Close

    ты боишься что это перекрытие метода ? ну на сколько я понял без override в C# это не прокатит


    Цитата archimed7592 @
    во-вторых, я использую m_form.Close, а не this.Close т. к. это static метод и в нем this нету

    это резонно :) но заметь, что метод Close в моем первом топике не static :) а значит у него есть this :)
    А вот close вызывает Close через m_form.Invoke(new EventHandler(m_form.Close));


    Цитата archimed7592 @
    ну и, в-третих, покажи свой InitializeComponent (лежит в *.Designer.cs)

    лови
    ExpandedWrap disabled
      /* -------------------------------------------------------------------------- */
      namespace mcl
      {
          partial class WaitForm
          {
              /* ------------------------------------------------------------------ */
              /// <summary>
              /// Required designer variable.
              /// </summary>
              private System.ComponentModel.IContainer components = null;
              /* ------------------------------------------------------------------ */
              /// <summary>
              /// Clean up any resources being used.
              /// </summary>
              /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
              ///
              /* ------------------------------------------------------------------ */
              protected override void Dispose(bool disposing)
              {
                  if (disposing && (components != null))
                  {
                      components.Dispose();
                  }
                  base.Dispose(disposing);
              }
              /* ------------------------------------------------------------------ */
              #region Windows Form Designer generated code
       
              /// <summary>
              /// Required method for Designer support - do not modify
              /// the contents of this method with the code editor.
              /// </summary>
              private void InitializeComponent()
              {
                  System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WaitForm));
                  this.Timer = new System.Windows.Forms.Timer();
                  this.Panel = new Labit.Controls.CatPanel();
                  this.MessageLabel = new Labit.Controls.CatLabel();
                  this.PictureBox = new Labit.Controls.CatPictureBox();
                  this.ClockImages = new System.Windows.Forms.ImageList();
                  this.Panel.SuspendLayout();
                  this.SuspendLayout();
                  //
                  // Timer
                  //
                  this.Timer.Interval = 500;
                  this.Timer.Tick += new System.EventHandler(this.Timer_Tick);
                  //
                  // Panel
                  //
                  this.Panel.BackgroundImg = null;
                  this.Panel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
                  this.Panel.Controls.Add(this.MessageLabel);
                  this.Panel.Controls.Add(this.PictureBox);
                  this.Panel.Dock = System.Windows.Forms.DockStyle.Fill;
                  this.Panel.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular);
                  this.Panel.ForeColor = System.Drawing.SystemColors.WindowText;
                  this.Panel.Location = new System.Drawing.Point(0, 0);
                  this.Panel.Name = "Panel";
                  this.Panel.Properties.InactiveBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(217)))), ((int)(((byte)(204)))), ((int)(((byte)(192)))));
                  this.Panel.Properties.InactiveForeColor = System.Drawing.SystemColors.ControlDark;
                  this.Panel.Properties.LookAndFeel.Background.BackgroundStyle = Labit.Controls.BackgroundStyle.Solid;
                  this.Panel.Properties.LookAndFeel.Background.EndColor = System.Drawing.Color.Blue;
                  this.Panel.Properties.LookAndFeel.Background.GradientOrientation = Labit.Controls.Orientation.Vertical;
                  this.Panel.Properties.LookAndFeel.Background.GradientStyle = Labit.Controls.GradientStyle.Normal;
                  this.Panel.Properties.LookAndFeel.Background.StartColor = System.Drawing.Color.White;
                  this.Panel.Properties.LookAndFeel.BorderColor = System.Drawing.SystemColors.ControlDark;
                  this.Panel.Properties.LookAndFeel.BorderStyle = Labit.Controls.BorderStyle.Flat;
                  this.Panel.Properties.LookAndFeel.FrameType = Labit.Controls.FrameType.Raised;
                  this.Panel.Properties.TextAlignment = Labit.Controls.ContentAlignment.MiddleCenter;
                  this.Panel.Size = new System.Drawing.Size(200, 48);
                  this.Panel.TabIndex = 0;
                  this.Panel.Text = "";
                  //
                  // MessageLabel
                  //
                  this.MessageLabel.BackgroundImg = null;
                  this.MessageLabel.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Regular);
                  this.MessageLabel.ForeColor = System.Drawing.SystemColors.WindowText;
                  this.MessageLabel.Location = new System.Drawing.Point(42, 13);
                  this.MessageLabel.Name = "MessageLabel";
                  this.MessageLabel.Properties.AllowFocus = false;
                  this.MessageLabel.Properties.InactiveBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(217)))), ((int)(((byte)(204)))), ((int)(((byte)(192)))));
                  this.MessageLabel.Properties.InactiveForeColor = System.Drawing.SystemColors.ControlDark;
                  this.MessageLabel.Properties.LookAndFeel.Background.BackgroundStyle = Labit.Controls.BackgroundStyle.Solid;
                  this.MessageLabel.Properties.LookAndFeel.Background.EndColor = System.Drawing.Color.Blue;
                  this.MessageLabel.Properties.LookAndFeel.Background.GradientOrientation = Labit.Controls.Orientation.Vertical;
                  this.MessageLabel.Properties.LookAndFeel.Background.GradientStyle = Labit.Controls.GradientStyle.Normal;
                  this.MessageLabel.Properties.LookAndFeel.Background.StartColor = System.Drawing.Color.White;
                  this.MessageLabel.Properties.LookAndFeel.Background.UseParentColor = true;
                  this.MessageLabel.Properties.LookAndFeel.BorderColor = System.Drawing.SystemColors.ControlDark;
                  this.MessageLabel.Properties.LookAndFeel.BorderStyle = Labit.Controls.BorderStyle.NoBorder;
                  this.MessageLabel.Properties.LookAndFeel.FrameType = Labit.Controls.FrameType.Sunken;
                  this.MessageLabel.Properties.TextAlignment = Labit.Controls.ContentAlignment.MiddleCenter;
                  this.MessageLabel.Size = new System.Drawing.Size(148, 20);
                  this.MessageLabel.TabIndex = 6;
                  this.MessageLabel.Text = "Подключение к комплексу...";
                  //
                  // PictureBox
                  //
                  this.PictureBox.BackgroundImg = null;
                  this.PictureBox.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular);
                  this.PictureBox.ForeColor = System.Drawing.SystemColors.WindowText;
                  this.PictureBox.Image = ((System.Drawing.Image)(resources.GetObject("PictureBox.Image")));
                  this.PictureBox.ImageAttribute = Labit.Controls.ImageAttribute.iaBestFit;
                  this.PictureBox.Location = new System.Drawing.Point(5, 7);
                  this.PictureBox.Name = "PictureBox";
                  this.PictureBox.Properties.AllowFocus = false;
                  this.PictureBox.Properties.InactiveBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
                  this.PictureBox.Properties.InactiveForeColor = System.Drawing.SystemColors.ControlDark;
                  this.PictureBox.Properties.LookAndFeel.Background.BackgroundStyle = Labit.Controls.BackgroundStyle.Solid;
                  this.PictureBox.Properties.LookAndFeel.Background.EndColor = System.Drawing.Color.Blue;
                  this.PictureBox.Properties.LookAndFeel.Background.GradientOrientation = Labit.Controls.Orientation.Vertical;
                  this.PictureBox.Properties.LookAndFeel.Background.GradientStyle = Labit.Controls.GradientStyle.Normal;
                  this.PictureBox.Properties.LookAndFeel.Background.StartColor = System.Drawing.Color.White;
                  this.PictureBox.Properties.LookAndFeel.Background.UseParentColor = true;
                  this.PictureBox.Properties.LookAndFeel.BorderColor = System.Drawing.SystemColors.ControlDark;
                  this.PictureBox.Properties.LookAndFeel.BorderStyle = Labit.Controls.BorderStyle.NoBorder;
                  this.PictureBox.Properties.LookAndFeel.FrameType = Labit.Controls.FrameType.Sunken;
                  this.PictureBox.Properties.TextAlignment = Labit.Controls.ContentAlignment.MiddleCenter;
                  this.PictureBox.Size = new System.Drawing.Size(33, 32);
                  this.PictureBox.TabIndex = 5;
                  this.PictureBox.Text = "";
                  //
                  // ClockImages
                  //
                  this.ClockImages.ImageSize = new System.Drawing.Size(128, 128);
                  this.ClockImages.Images.Clear();
                  this.ClockImages.Images.Add(((System.Drawing.Image)(resources.GetObject("resource"))));
                  this.ClockImages.Images.Add(((System.Drawing.Image)(resources.GetObject("resource1"))));
                  this.ClockImages.Images.Add(((System.Drawing.Image)(resources.GetObject("resource2"))));
                  this.ClockImages.Images.Add(((System.Drawing.Image)(resources.GetObject("resource3"))));
                  //
                  // WaitForm
                  //
                  this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
                  this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
                  this.AutoScroll = true;
                  this.BackColor = System.Drawing.SystemColors.Control;
                  this.ClientSize = new System.Drawing.Size(200, 48);
                  this.ControlBox = false;
                  this.Controls.Add(this.Panel);
                  this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                  this.Name = "WaitForm";
                  this.Text = "Пожалуйста, подождите...";
                  this.Closed += new System.EventHandler(this.WaitForm_Closed);
                  this.Load += new System.EventHandler(this.WaitForm_Load);
                  this.Panel.ResumeLayout(false);
                  this.ResumeLayout(false);
       
              }
       
              #endregion
       
              private System.Windows.Forms.Timer Timer;
              private Labit.Controls.CatPanel Panel;
              private Labit.Controls.CatLabel MessageLabel;
              private Labit.Controls.CatPictureBox PictureBox;
              private System.Windows.Forms.ImageList ClockImages;
              /* ------------------------------------------------------------------ */
          }
      }
    Сообщение отредактировано: zss -
      Цитата zss @
      this.Closed += new System.EventHandler(this.WaitForm_Closed);
      здесь все ок :)
      Цитата zss @
      ты боишься что это перекрытие метода ? ну на сколько я понял без override в C# это не прокатит
      я уверен, что это перекрытие метода... :) поставь вместо
      Цитата zss @
      private void Close(object sender, EventArgs e)
      {
      m_form.Close();
      }
      ExpandedWrap disabled
                private void Close(object sender, EventArgs e)
                {
                    MessageBox.Show ("...");
                    m_form.Close();
                }
      и увидишь, что он крутиться в рекурсии :)
        Цитата archimed7592 @
        и увидишь, что он крутиться в рекурсии

        у них сигнатуры абсолютно разные

        void Close()
        и
        void Close(object sender, EventArgs e)


        что-то не совсем клеится :)

        Добавлено
        Цитата archimed7592 @
        я уверен, что это перекрытие метода...

        убеди меня :)
        Сообщение отредактировано: zss -
          Цитата zss @
          что-то не совсем клеится
          согласен...
          ну хорошо, у тебя мой modal.zip компилится? просто у меня он помимо этого ещё и работает :) почему не работает твой? не знаю...давай проект полностью, разберемся...
            Цитата archimed7592 @
            у хорошо, у тебя мой modal.zip компилится? просто у меня он помимо этого ещё и работает

            да у меня он тоже работает. есть сомнения с Application.Run(m_form)

            складываетя впечатление, что в этом случае нет привязки к процесу
              Цитата zss @
              есть сомнения с Application.Run(m_form)

              складываетя впечатление, что в этом случае нет привязки к процесу
              Application.Run запускает message loop в текущем потоке... я че-т не пойму, у тебя твой код не работает, а мой работает? ты разницу нашел?
                сорри если влез не в тему - в начале поста интересовались почему дочерний процесс пашет при закрытии формы, его породившей...
                если вопрос еще актуален то вот - по умолчанию всякий новый процесс создается из свойством IsBackground = false, что и позволяет ему существовать самостоятельно. IsBackground = true спасет отца русской демократии.

                ПС:
                както тоже пробовал создавать формы в дочерних потоках - неблагодарная затея :) в чом проблема не разобрался - не было ни времени ни желания. проще перенести форму в основной поток. :)
                  Цитата Fox @
                  IsBackground = true

                  а это чье свойство ?
                      Цитата archimed7592 @
                      Thread.IsBackground Property

                      а не заблокирует ли при этом порожденный поток родительский ?
                        Цитата
                        Thread.IsBackground Property

                        а не заблокирует ли при этом порожденный поток родительский ?

                        Не должен.
                          Цитата KotovAlexander @
                          Не должен.

                          странно, но тогда логично бы было его сделать по-умолчанию не false, а true
                          Сообщение отредактировано: zss -
                            При установке свойства потока Thread.IsBackground = true, создаётся поток-демон. Т. е. поток, который не может существовать без основного процесса. Умирает процесс - умирают все демоны. Естественно это свойство должно быть установлено перед Thread.Start().
                            ExpandedWrap disabled
                              Thread thr = new Thread(new ThreadStart(Run));
                              thr.IsBackground = true;
                              thr.Start();
                              Цитата SmartX @
                              Т. е. поток, который не может существовать без основного процесса

                              честно говоря я плохо знаю механизмы C#, но с точки зрения ОС не совсем логично существование потока без процесса
                              (особенно порожденного потока от родительского)
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:
                              Страницы: (3) 1 2 [3]  все


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0614 ]   [ 16 queries used ]   [ Generated: 26.12.24, 10:05 GMT ]