Текстовое поле водяных знаков в WinForms

Укажите на тот, который не является ответом.
, Даже если Вы никогда не программируете в нем, я нахожу полезным знать по крайней мере одну ассемблерную систему команд. Это - часть программистов бесконечные поиски, чтобы знать больше и поэтому быть лучше. Также полезный при продвижении в платформы у Вас нет исходного кода к и имеющий, по крайней мере, общее представление, что продолжается. Это также помогает Вам понять JavaByteCode и.Net IL, поскольку они оба подобны ассемблеру.

Для ответа на вопрос, когда у Вас есть небольшой объем кода или большое количество времени. Самый полезный для использования во встроенных микросхемах, где низкая сложность микросхемы и плохая конкуренция в компиляторах, предназначающихся для этих микросхем, могут склонить чашу весов в пользу людей. Также для ограниченных устройств Вы часто обмениваете размер кода / размер/производительность памяти способом, который был бы труден дать компилятору команду делать. например, Я знаю, что это пользовательское действие часто не называют, таким образом, у меня будут небольшой размер кода и низкая производительность, но эта другая функция, которые выглядят подобными, используется каждая секунда, таким образом, у меня будут больший размер кода и более быстрая производительность. Это - вид компромисса, который может использовать квалифицированный программист блока.

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

Мой друг работает над микро контроллерами, в настоящее время микросхемы для управления маленькими электродвигателями. Он работает в комбинации низкого уровня c и блока. Он когда-то сказал мне о хорошем дне на работе, где он уменьшил основной цикл с 48 инструкций до 43. Он также сталкивается с выбором как код, вырос для заполнения 256k микросхемы, и бизнес желает новую возможность, сделайте Вас

  1. , Удаляют существующую функцию
  2. , Уменьшают размер некоторых или все существующие функции, возможно, за счет производительности.
  3. Защитник, перемещающийся в большую микросхему с более высокой стоимостью, более высокую потребляемую мощность и больший форм-фактор.

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

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

так позволяет попытке еще раз, необходимо думать о блоке

  • работа над низкоуровневой функцией операционной системы
  • Работа над компилятором.
  • Работа над чрезвычайно ограниченной микросхемой, встроенная система и т.д.

Не забывает сравнивать Ваш блок с компилятором, сгенерированным для наблюдения, который быстрее/меньше/лучше.

David.

53
задан KeithS 4 February 2011 в 11:07
поделиться

1 ответ

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

namespace PlaceHolderTextBoxCSharp
{
    public class CTextBox : TextBox
    {
        private Panel contenedor;
        protected string texto = "PlaceHolderText";
        protected Color colorTextoDefault = Color.Gray;
        public Color colorTexto = Color.Gray;
        protected Color colorTextoObligatorio = Color.Red;
        private Font fuente;
        private SolidBrush establecerColorTexto;
        private bool obligatoriedad = false;
        private bool colorConFoco = false;
        private int vuelta = 0;

        public CTextBox()
        {
            Inicializar();
        }

        private void Inicializar()
        {
            fuente = Font;
            CharacterCasing = CharacterCasing.Upper;
            contenedor = null;

            MuestraPlaceHolder();

            Leave += new EventHandler(PierdeFoco);
            TextChanged += new EventHandler(CambiaTexto);
        }

        private void EliminaPlaceHolder()
        {
            if (contenedor != null)
            {
                Controls.Remove(contenedor);
                contenedor = null;
            }
        }

        private void MuestraPlaceHolder()
        {
            if (contenedor == null && TextLength <= 0)
            {
                contenedor = new Panel();
                contenedor.Paint += new PaintEventHandler(contenedorPaint);
                contenedor.Invalidate();
                contenedor.Click += new EventHandler(contenedorClick);
                Controls.Add(contenedor);
            }
        }

        private void contenedorClick(object sender, EventArgs e)
        {
            Focus();
        }

        private void contenedorPaint(object sender, PaintEventArgs e)
        {
            contenedor.Location = new Point(2, 0);
            contenedor.Height = Height;
            contenedor.Width = Width;
            contenedor.Anchor = AnchorStyles.Left | AnchorStyles.Right;
            establecerColorTexto = new SolidBrush(colorTexto);
            Graphics g = e.Graphics;
            g.DrawString(texto, fuente, establecerColorTexto, new PointF(-1f, 1f));
        }

        private void PierdeFoco(object sender, EventArgs e)
        {
            if (TextLength > 0)
            {
                EliminaPlaceHolder();
            }
            else
            {
                if (obligatoriedad == true)
                {
                    colorTexto = colorTextoObligatorio;
                }
                else
                {
                    colorTexto = colorTextoDefault;
                }

                Invalidate();
            }
        }

        private void CambiaTexto(object sender, EventArgs e)
        {
            if (TextLength > 0)
            {
                EliminaPlaceHolder();
            }
            else
            {
                MuestraPlaceHolder();

                vuelta += 1;

                if (vuelta >= 1 && obligatoriedad == true)
                {
                    colorTexto = colorTextoObligatorio;
                }
            }
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            MuestraPlaceHolder();
        }

        protected override void OnInvalidated(InvalidateEventArgs e)
        {
            base.OnInvalidated(e);

            if (contenedor != null)
            {
                contenedor.Invalidate();
            }
        }

        [Category("Atributos PlaceHolder")]
        [Description("Establece el texto a mostrar.")]

        public string PlaceHolderText
        {
            get
            {
                return texto;
            }
            set
            {
                texto = value;
                Invalidate();
            }
        }

        [Category("Atributos PlaceHolder")]
        [Description("Establece el estilo de fuente del PlaceHolder.")]

        public Font PlaceHolderFont
        {
            get
            {
                return fuente;
            }
            set
            {
                fuente = value;
                Invalidate();
            }
        }

        [Category("Atributos PlaceHolder")]
        [Description("Indica si el campo es obligatorio.")]

        public bool PlaceHolderFieldRequired
        {
            get
            {
                return obligatoriedad;
            }
            set
            {
                obligatoriedad = value;
                Invalidate();
            }
        }
    }
}
0
ответ дан 7 November 2019 в 08:21
поделиться
Другие вопросы по тегам:

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