Как разработать форму в форме Windows, аналогичную диалогу «Прогноз отправки / получения outlook 2007»? - PullRequest
2 голосов
/ 25 февраля 2010

Я хочу разработать диалоговое окно с использованием оконных форм в C #, которое напоминает поведение outlook 2007 «отправлять / получать» в своем поведении. Я разработал большинство функций, но у меня возникли проблемы, когда мне нужно реализовать функцию кнопки «Детали».

По сути, диалоговое окно имеет индикатор выполнения и панель с вкладками под индикатором выполнения. Справа от индикатора выполнения есть кнопка с надписью «Подробности». По сути, когда вы нажимаете эту кнопку, она либо отображает, либо скрывает элемент управления вкладки (который содержит сообщения о состоянии) И изменяет размеры формы, чтобы соответствовать оставшимся элементам управления (то есть уменьшить или увеличить)

Я использовал базовую форму, менеджер раскладки по умолчанию, на котором у меня есть индикатор выполнения, кнопка и т. Д., Как в Outlook. когда пользователь нажимает кнопку «Сведения», я устанавливаю свойство видимого элемента управления вкладкой false. Я ожидал, что форма изменится, но это не так. Если я использую autosize и autosizemode, он работает, но с этими установленными свойствами я не могу привязать элемент управления tab.

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

Есть ли способ достичь этого? Я пытался использовать flowlayout и tablelayout, но они, похоже, не помогают ... Я также пытался удалить tabcontrol из коллекции Controls формы и затем вызвать PerformLayout (), но ничего из этого не работает.

какие-нибудь указатели? Спасибо сб

Ответы [ 3 ]

1 голос
/ 25 февраля 2010

Вам также необходимо кодировать изменение размера вашей формы. Вы не должны заботиться о закреплении вкладки, поскольку вы ее скрываете. Просто добавьте код для изменения размера формы каждый раз, когда нажимается кнопка показать \ скрыть детали.

0 голосов
/ 25 февраля 2010

Это довольно просто, просто попробуйте это:

Form1.Designer.cs

namespace DetailsSample
{
    partial class Form1
    {
        /// <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()
        {
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.button1 = new System.Windows.Forms.Button();
            this.textBox2 = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            // 
            // textBox1
            // 
            this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.textBox1.Location = new System.Drawing.Point(12, 12);
            this.textBox1.Multiline = true;
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(268, 62);
            this.textBox1.TabIndex = 0;
            // 
            // button1
            // 
            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.button1.Location = new System.Drawing.Point(205, 80);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 1;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // textBox2
            // 
            this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                        | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.textBox2.Location = new System.Drawing.Point(12, 109);
            this.textBox2.Multiline = true;
            this.textBox2.Name = "textBox2";
            this.textBox2.Size = new System.Drawing.Size(268, 152);
            this.textBox2.TabIndex = 2;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(292, 273);
            this.Controls.Add(this.textBox2);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.textBox1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.TextBox textBox2;
    }
}

Form1.cs

using System;
using System.Drawing;
using System.Windows.Forms;

namespace DetailsSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox2.Height > 0)
            {
                this.Size = new Size(this.Size.Width, button1.Location.Y +
                                                      button1.Height +
                                                      button1.Margin.Bottom +
                                                      27);

                button1.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
                textBox1.Anchor |= AnchorStyles.Bottom;
                textBox2.Anchor ^= AnchorStyles.Top;
            }
            else
            {
                button1.Anchor = AnchorStyles.Top | AnchorStyles.Right;
                textBox1.Anchor ^= AnchorStyles.Bottom;
                textBox2.Anchor |= AnchorStyles.Top;

                this.Size = new Size(this.Size.Width, textBox2.Location.Y +
                                                      160);
            }
        }
    }
}

Это довольно совершенное примечание, но оно дает вам хорошую отправную точку, чего вы можете достичь, просто установив Якоря и, благодаря этому, неявную высоту обнуляйте.

Также жестко заданные значения высоты (27 и 160) немного некрасивы. Для 160 вы должны сохранить где-то последнюю высоту вашего нижнего элемента управления, а для 27 вы можете использовать какой-то расчет PointToScreen, чтобы узнать, сколько места заняла строка заголовка.

0 голосов
/ 25 февраля 2010

Вы пробовали установить Dock = System.Windows.Forms.DockStyle.Fill; на вкладке? В этом случае он должен изменить размер формы.

Вы можете добавить другие элементы управления к двум другим панелям, для которых вы установили Dock.Top и Dock.Bottom, чтобы иметь элементы управления над и под вашим элементом управления вкладками. Если вы работаете с визуальным дизайнером Visual Studio, не забывайте, что вы можете щелкнуть правой кнопкой мыши элемент управления и щелкнуть «Вернуть на передний план» или «Вернуть на задний план», если элементы управления расположены друг над другом.

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