Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > изменения размеров CheckBox


Автор: nmn 16.2.2009, 18:00
Есть такой компонент CheckBox, используя свойства Size, Width, Height (может еще какие, я проверял только эти) невозможно изменить размеры, размеры можно изменить только используя свойство MinimumSize. Эти все свойства CheckBox наследует от Control не переопределяя. Вопрос: каким образом можно добиться подобной функциональности в собственном компоненте не переопределяя свойства, т.е. используя тот же механизм, который использует CheckBox?

Автор: diadiavova 16.2.2009, 19:10
Указанные свойства чекбокса можно изменять, если утановить AutoSize = false. Понимаю: это не ответ на вопрос, но, думаю, копать надо в этом направлении.

Автор: unicuum 16.2.2009, 19:45
Цитата(nmn @  16.2.2009,  18:00 Найти цитируемый пост)
Есть такой компонент CheckBox, используя свойства Size, Width, Height (может еще какие, я проверял только эти) невозможно изменить размеры, размеры можно изменить только используя свойство MinimumSize. 


Код
private void Form1_Load(object sender, System.EventArgs e)
{
    // Делаем задний фон видимым на фоне формы.
    this.checkBox1.BackColor = System.Drawing.SystemColors.Info;
    // Растягиваем объект класса CheckBox в два раза по ширине
    this.checkBox1.Size = new Size
        (this.checkBox1.Size.Width * 2, this.checkBox1.Size.Height);
}


Цитата(nmn @  16.2.2009,  18:00 Найти цитируемый пост)
Вопрос: каким образом можно добиться подобной функциональности в собственном компоненте не переопределяя свойства, т.е. используя тот же механизм, который использует CheckBox? 

А какой по твоему механизм использует CheckBox?

Автор: nmn 16.2.2009, 20:22
Цитата(unicuum @  16.2.2009,  19:45 Найти цитируемый пост)
private void Form1_Load(object sender, System.EventArgs e)
{
    // Делаем задний фон видимым на фоне формы.
    this.checkBox1.BackColor = System.Drawing.SystemColors.Info;
    // Растягиваем объект класса CheckBox в два раза по ширине
    this.checkBox1.Size = new Size
        (this.checkBox1.Size.Width * 2, this.checkBox1.Size.Height);
}

не знаю что делает этот код у вас, но у меня он размер не меняет, вернее меняет Size становится равным тому что присваивается, но тут же становится прежним (проверить можно подписавшись на событие SizeChanged или ClientSizeChanged)
механизм, используя который можно было бы запретить изменение размеров контрола не переопределяя соответствующие свойства, я про них писал выше

Автор: unicuum 16.2.2009, 21:47
Цитата(nmn @  16.2.2009,  20:22 Найти цитируемый пост)
не знаю что делает этот код у вас, но у меня он размер не меняет, вернее меняет Size становится равным тому что присваивается, но тут же становится прежним (проверить можно подписавшись на событие SizeChanged или ClientSizeChanged)

Не надо заморачиваться на всяких мелочах. Если тебе сказали поставить авторазмер в false, так поставь. А я вот другой пример написал.

Код
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace ResizeCheckbox
{
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.CheckBox checkBox1;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (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.checkBox1 = new System.Windows.Forms.CheckBox();
            this.SuspendLayout();
            // 
            // checkBox1
            // 
            this.checkBox1.BackColor = System.Drawing.SystemColors.Info;
            this.checkBox1.Location = new System.Drawing.Point(8, 24);
            this.checkBox1.Name = "checkBox1";
            this.checkBox1.Size = new System.Drawing.Size(88, 24);
            this.checkBox1.TabIndex = 0;
            this.checkBox1.Text = "single";
            this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
            // 
            // Form1
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(200, 77);
            this.Controls.Add(this.checkBox1);
            this.Name = "Form1";
            this.Text = "Resize CheckBox";
            this.ResumeLayout(false);

        }
        #endregion

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main() 
        {
            Application.Run(new Form1());
        }

        private void checkBox1_CheckedChanged(object sender, System.EventArgs e)
        {
            if (checkBox1.Checked)
            {
                this.checkBox1.Size = new Size
                    (this.checkBox1.Size.Width * 2, this.checkBox1.Size.Height);
                this.checkBox1.Text = "double";
            }
            else
            {
                this.checkBox1.Size = new Size
                    (this.checkBox1.Size.Width / 2, this.checkBox1.Size.Height);
                this.checkBox1.Text = "single";
            }
        }

    }
}


http://www.filehoster.ru/files/cf3165

Автор: nmn 19.2.2009, 12:31
если Autosize=true, то откуда берется размер?

Автор: lam0x7C4 22.2.2009, 16:47
Цитата(nmn @ 19.2.2009,  12:31)
если Autosize=true, то откуда берется размер?
 

Тогда размер рассчитывется исходя из размера текста на ТекстБоксе.
В примере unicuum перепиши код события таким образом:

Код

        private void checkBox1_CheckedChanged(object sender, System.EventArgs e)
        {
            if (checkBox1.Checked)
            {
                this.checkBox1.Size = new Size
                    (this.checkBox1.Size.Width * 2, this.checkBox1.Size.Height);
                this.checkBox1.Text = "double";
            }
            else
            {
                this.checkBox1.Size = new Size
                    (this.checkBox1.Size.Width / 2, this.checkBox1.Size.Height);

                // генерируем какой-то там текст
                StringBuilder sb = new StringBuilder();
                sb.Append("Generated: ");
                for (int i = 0; i < new Random().Next(20); i++)
                {
                    sb.Append(i);
                }
                 
                this.checkBox1.Text = sb.ToString();//"single";
            }
        }

Автор: nmn 22.2.2009, 17:34
от текста зависит... понятно, что от текста
мне необходимо сделать такое же в собственном компоненте, если AutoSize=true, размеры не изменяются, но если AutoSize=false изменить размеры и включить AutoSize то размеры в CheckBox становятся прежними, а моем элементе управления остаются теми же, а мне нужно чтобы становились такимим какими надо

тут понаписывал smile, на самом деле у меня компонент как то не очень реагирует на AutoSize, хочется что бы было как у CheckBox

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)