Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать производный класс для кнопки ? C#, System.Windows.Forms.Button 
:(
    Опции темы
mr.DUDA
Дата 4.2.2004, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Создаю проект UserControl, переписываю класс контрола таким образом, как показано ниже, компилирую и получаю сборку (DLL), добавляю полученную супер-кнопку в другой проект (Add Reference..., перетягиваю супер-кнопку "CFadeButton control" из тулбокса на форму), и компилирую проект ----- почему ВСЕ свойства кнопки сразу после запуска программы кривые (цвет - чёрный, Caption - "cFadeButton" и т.п.) ? Тоже самое (цвет чёрный) - на форме в Design View.

Помогите !!!

Цитата
файл FadeButton.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Threading;

namespace FadeButton
{
/// <summary>
/// Summary description for UserControl1.
/// </summary>
public class CFadeButton : System.Windows.Forms.Button
{
  private Thread m_Thread;
  private Color m_ColorActive;
  private Color m_ColorInactive;
  private Color m_ColorCurrent;
  private int m_nMillisecsDelay;
  private bool m_bActive;
  private int m_nSteps;
  private int m_iCurrStep;
 
  private int CurrStep
  {
  get {return m_iCurrStep;}
  set
  {
    m_iCurrStep = value;
    float fRC = m_ColorCurrent.R, fRI = m_ColorInactive.R, fRA = m_ColorActive.R;
    float fGC = m_ColorCurrent.G, fGI = m_ColorInactive.G, fGA = m_ColorActive.G;
    float fBC = m_ColorCurrent.B, fBI = m_ColorInactive.B, fBA = m_ColorActive.B;
    float d = ((float)m_iCurrStep)/((float)m_nSteps);
    float fR = fRI + (fRA - fRI)*d;
    float fG = fGI + (fGA - fGI)*d;
    float fB = fBI + (fBA - fBI)*d;
    m_ColorCurrent = Color.FromArgb((int)fR, (int)fG, (int)fB);
    this.BackColor = m_ColorCurrent;
  }
  }

  private void Reinit()
  {
  m_ColorCurrent = m_ColorInactive;
  m_bActive = false;
  CurrStep = 0;
  }

  private void ThreadFunc()
  {
  while(true)
  {
    Thread.Sleep(m_nMillisecsDelay);
    if(m_bActive)
    {
    if(CurrStep + 1 < m_nSteps)
      CurrStep++;
    }
    else
    {
    if(CurrStep > 0)
      CurrStep--;
    }
  }
  }

  private void OnMouseEnter(object sender, EventArgs e)
  {
  m_bActive = true;
  }

  private void OnMouseLeave(object sender, EventArgs e)
  {
  m_bActive = false;
  }

  public CFadeButton()
  {
  this.m_ColorInactive = System.Windows.Forms.Control.DefaultBackColor;
  this.m_ColorActive = Color.WhiteSmoke;
  this.BackColor = System.Windows.Forms.Control.DefaultBackColor;
  CurrStep = 0;

  this.MouseEnter += new EventHandler(OnMouseEnter);
  this.MouseLeave += new EventHandler(OnMouseLeave);
 
  m_nSteps = 20;
  m_nMillisecsDelay = 20;
  m_Thread = new Thread(new ThreadStart(ThreadFunc));
  m_Thread.Start();
  }

  protected override void Dispose( bool disposing )
  {
  if( disposing )
  {
    m_Thread.Abort();
  }
  base.Dispose( disposing );
  }

}
}





--------------------
user posted image
PM MAIL WWW   Вверх
Albinos
Дата 5.2.2004, 03:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 11.10.2003

Репутация: 2
Всего: 3



Не знаю. Я делал вот так:

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

namespace MyControls
{
/// <summary>
/// Summary description for UserControl1.
/// </summary>
public class SUPERButton : System.Windows.Forms.Control, System.Windows.Forms.IButtonControl
{
 ...
}
}


Скорее всего тебя интересует внешний вид кнопки:

Код
protected override void OnPaint(PaintEventArgs e)
{
 /// Базовый метод
 base.OnPaint(e);

 ...
}


А для того, чтобы прорисовка не была заметна - включаем двойную буферизацию:

Код
this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.Selectable, true);


Можно программировать видимость свойств и общее поведение контрола в дезайнере и редакторе:
Код
[B][Browsable(false)]
[Description("Описание свойства...")][/B]
public bool IsDefault
{
 get
  {
   return isDefault;
  }
}



Ну в общем и т.д. В MSDN в принципе про это написано, но искать будешь долго ... sad.gif
PM MAIL   Вверх
Albinos
Дата 5.2.2004, 03:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 11.10.2003

Репутация: 2
Всего: 3



Цитата
и
Цитата
в последнем примере не надо... (страничка не отработала выделение sad.gif)
PM MAIL   Вверх
Albinos
Дата 5.2.2004, 03:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 11.10.2003

Репутация: 2
Всего: 3



Блин, а здесь отработала smile.gif. В общем - {B} и {/B} - не надо.
PM MAIL   Вверх
mr.DUDA
Дата 6.2.2004, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата
public class SUPERButton : System.Windows.Forms.Control, System.Windows.Forms.IButtonControl

Не катит - компилер ругается, что нужно реализовать методы интерфейса IButtonControl (NotifyDefault, PerformClick, DialogResult). И раз мы берём базовый класс System.Windows.Forms.Control - то получается, что весь контрол нужно организовать с нуля ? А в моём примере класс порождается уже из готовой кнопки, я лишь добавил функциональности для "подсветки" кнопки при наведении мыши. Или так делать нельзя (напрямую производить от System.Windows.Forms.Button) ?


--------------------
user posted image
PM MAIL WWW   Вверх
Guest
Дата 7.2.2004, 12:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Короче, если все еще проблемка осталась, вот тебе ее решение.. Я надеюсь. smile.gif
Я тут написал два почти одинаковых файла, но они реализуют немножко разный подход.
Здесь я не стал выносить описание собственного контрола (приятно звучит smile.gif ), а встроил в описание тестирующего класса (просто форма с кнопкой). Мне кажется, так понятнее.
Из примеров следует, что от Button МОЖНО наследоваться.
Причем без проблем.
Чем отличаются файлы?
1-й (ButtonSon.cs) ПЕРЕГРУЖАЕТ функции OnMouseEnter, OnMouseLeave, к-е, если не ошибаюсь, определены в базовом классе Control.
2-й (ButtonSon1.cs) НАВЕШИВЕТ СОБЫТИЯ OnMouseEnter, OnMouseLeave.
Ты можешь откомпилить оба файла и посмотреть, что получится - подсвеченный контрол.
А различие подходов 1-го и 2-го файла, что от 2-й версии проблемнее наследоваться - я имею ввиду, там навешивание событий происходит в конструкторе - если ты в потомке от собственного контрола (может ведь такое быть?) явно не вызовешь конструктор родителя - все - обработчики потеряны.
Первый способ, как мне кажется, лучше. Мы просто перегрузили методы. Соответственно, наследоваться будут уже новые обработчики -> с наследниками все в порядке! smile.gif

ClientSon:

Код

/* ButtonSon.cs */

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

namespace ButtonSonNameSpace{

public class ButtonTest: Form{

 
 private class MyButton: Button{

  private Color OnColor;
  private Color OffColor;
 
  public  MyButton(){
   
   this.OffColor = Color.Yellow;
   this.OnColor = Color.Green;
   
   this.BackColor = this.OffColor;

   return;

  }

  protected override  void OnClick(EventArgs e){
   
   MessageBox.Show("OnClick!");

   return;  

  }

   protected override void OnMouseEnter(EventArgs e){
   
   this.BackColor = this.OnColor;

   return;
 
  }

    protected override void OnMouseLeave(EventArgs e){
   
   this.BackColor = this.OffColor;
 
   return;
    }

 };
 
 private MyButton button;
 
 private ButtonTest(){
 
  button = new MyButton();
  button.Text = "Test!";
  button.Location = new Point(10,10);
  this.Controls.Add(button);

 }

 public static void Main(){
 
  Application.Run(new ButtonTest());
  return;
 
 }
 
}

}



ClientSon1:
Код

/* ButtonSon1.cs */

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

namespace ButtonSonNameSpace{

public class ButtonTest: Form{

 
 private class MyButton: Button{

  private Color OnColor;
  private Color OffColor;
 
  public  MyButton(){
   
   this.OffColor = Color.Yellow;
   this.OnColor = Color.Green;
   
   this.BackColor = this.OffColor;

   this.MouseEnter += new EventHandler(OnMouseEnter);
   this.MouseLeave += new EventHandler(OnMouseLeave);
   
   return;

  }

  protected override  void OnClick(EventArgs e){
   
   MessageBox.Show("OnClick!");

   return;    

  }

   public void OnMouseEnter(object sender, EventArgs e){
   
   this.BackColor = this.OnColor;

   return;
 
  }

    public void OnMouseLeave(object sender, EventArgs e){
   
   this.BackColor = this.OffColor;
 
   return;
    }

 };
 
 private MyButton button;
 
 private ButtonTest(){
 
  button = new MyButton();
  button.Text = "Test!";
  button.Location = new Point(10,10);
  this.Controls.Add(button);

 }

 public static void Main(){
 
  Application.Run(new ButtonTest());
  return;
 
 }
 
}

}



  Вверх
Kurt
Дата 7.2.2004, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



Guest - это я!
Просто почему-то забыл залогиниться.. sad.gif

Это сообщение отредактировал(а) Kurt - 7.2.2004, 13:23


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Albinos
Дата 8.2.2004, 03:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 11.10.2003

Репутация: 2
Всего: 3



Цитата
Не катит - компилер ругается, что нужно реализовать методы интерфейса IButtonControl


Разумеется. Если залезть в MSDN и посмотреть, то Button именно так и определяется. Я тебе не все дал, а только наметки. Необходио реализовать интерфйс IButtonControl (если в редакоре начать писать SUPERButton: Control, IButtonControl, то VS предложить добавить реализацию интерфейса IButtonControl в твой класс. По нажатию TAB`а. Дальше реализовывать надо самому, т.е. приватные переменные и т.д. и т.п.).

Цитата
А в моём примере класс порождается уже из готовой кнопки, я лишь добавил функциональности для "подсветки" кнопки при наведении мыши. Или так делать нельзя (напрямую производить от System.Windows.Forms.Button) ?


Наследовать конечно можно. Меня интересовало написание своих контролов с нуля, поэтому пошел по такому пути. Подсветку кнопки реализовывал как описывает Kurt (имею ввиду добавление обработчика на MouseHover). Ну и остальной функционал так же.

А вообще - привожу полный код (возможно, кривой, т.к. времени на прорботку было мало.)
Код

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

namespace MyControls
{
/// <summary>
/// Summary description for UserControl1.
/// </summary>
public class MyButton : System.Windows.Forms.Control, System.Windows.Forms.IButtonControl
{
 /// <summary>
 /// Результат, который возвращается диалогу.
 /// </summary>
 private DialogResult dialogResult;

 /// <summary>
 /// Кнопка по-умолчанию или нет.
 /// </summary>
 private bool isDefault = false;

 /// <summary>
 /// Цвет границы кнопки.
 /// </summary>
 private System.Drawing.Color borderColor = System.Drawing.Color.FromKnownColor(System.Drawing.KnownColor.ControlDark);

 /// <summary>
 /// Пен границы.
 /// </summary>
 private System.Drawing.Pen borderPen;

 /// <summary>
 /// Положение текста.
 /// </summary>
 private StringFormat strFmt = new StringFormat();

 /// <summary>
 /// Указатель мыши внутри контрола или нет.
 /// </summary>
 private bool hovered = false;

 /// <summary>
 /// Нажата кнопка или нет.
 /// </summary>
 private bool pressed = false;

 /// <summary>
 /// Цвет активной границы.
 /// </summary>
 private Color activeBorderColor;

 private Pen activeBorderPen;

 public MyButton()
 {
  /// Курсор по умолчанию
  Cursor = Cursors.Hand;

  /// Создаем пены для прорисовки границы, бэка и текста
  borderPen = new Pen(borderColor);
  activeBorderColor = Color.FromKnownColor(KnownColor.Black);
  activeBorderPen = new Pen(activeBorderColor);

  /// Положение текста по-умолчанию
  strFmt.Alignment = StringAlignment.Center;
  strFmt.LineAlignment = StringAlignment.Center;
  strFmt.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.NoClip;
  strFmt.Trimming = StringTrimming.EllipsisCharacter;

  /// Установка стилей контрола
  this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.Selectable, true);

  /// Обработчики событий
  this.MouseEnter += new EventHandler(MyButton_MouseEnter);
  this.MouseLeave += new EventHandler(MyButton_MouseLeave);
  this.MouseDown += new MouseEventHandler(MyButton_MouseDown);
  this.MouseUp += new MouseEventHandler(MyButton_MouseUp);

  /// Меняется состояние кнопки
  this.EnabledChanged += new EventHandler(MyButton_EnabledChanged);

  /// Кнопка получает фокус
  this.Enter += new EventHandler(MyButton_Enter);
  /// Кнопка теряет фокус
  this.Leave += new EventHandler(MyButton_Leave);

  this.TextChanged += new EventHandler(MyButton_TextChanged);
 }

 /// <summary>
 /// Возвращает значение поля "кнопка по-умолчанию".
 /// </summary>
 [Browsable(false)]
 public bool IsDefault
 {
  get
  {
   return isDefault;
  }
 }

 /// <summary>
 /// Обеспечивает доступ к цвету границы в активном состоянии.
 /// </summary>
 [Description("Обеспечивает доступ к цвету границы в активном состоянии кнопки.")]
 public Color ActiveBorderColor
 {
  get
  {
   return activeBorderColor;
  }

  set
  {
   activeBorderColor = value;

   activeBorderPen.Color = activeBorderColor;

   Invalidate();
  }
 }

 /// <summary>
 /// Выставляет или возвращает цвет границы.
 /// </summary>
 [Description("Обеспечивает доступ к цвету границы в неактивном состоянии кнопки.")]
 public System.Drawing.Color BorderColor
 {
  get
  {
   return borderColor;
  }

  set
  {
   borderColor = value;

   /// Запоминаем цвет в пен
   borderPen.Color = value;

   /// Обновить
   Invalidate();
  }
 }

 /// <summary>
 /// Выставляет или возвращает положение текста.
 /// </summary>
 [Description("Положение текста на кнопке.")]
 [DefaultValue(StringAlignment.Center)]
 public System.Drawing.StringAlignment TextAlign
 {
  get
  {
   return strFmt.Alignment;
  }

  set
  {
   strFmt.Alignment = value;

   /// Обновить
   Invalidate();
  }
 }

 /// <summary>
 /// Переопределенная процедура прорисовки кнопки.
 /// </summary>
 /// <param name="e"></param>
 protected override void OnPaint(PaintEventArgs e)
 {
  /// Базовый метод
  base.OnPaint(e);

  /// Если задисабленна
  if (!Enabled)
  {
   /// Очистка
   e.Graphics.Clear(BackColor);

   /// Прорисовка границы
   e.Graphics.DrawRectangle(new Pen(System.Drawing.SystemColors.GrayText), 0, 0, ClientSize.Width - 1, ClientSize.Height - 1);

   /// Прорисовка текста кнопки
   e.Graphics.DrawString(Text, Font, System.Drawing.SystemBrushes.FromSystemColor(System.Drawing.SystemColors.GrayText), ClientRectangle, strFmt);
  }
  else
  {
   Color drawBackColor = new Color();
   Color drawBorderColor = new Color();

   /// Если над ней мышка.
   if (hovered)
   {
    if (pressed)
     /// цвет фона
     drawBackColor = Color.FromArgb(225, 223, 215);
    else
     /// цвет фона
     drawBackColor = Color.FromArgb(182, 189, 210);

    /// цвет границы
    drawBorderColor = Color.FromArgb(10, 36, 106);
   }
   else
   {
    /// Если сфокусирована
    if (Focused)
     /// цвет фона
     drawBackColor = Color.FromArgb(225, 223, 215);
    else
     /// цвет фона
     drawBackColor = BackColor;

    /// Если кнопка по умолчанию
/*     if (IsDefault)
     /// цвет границы
     drawBorderColor = Color.FromArgb(0, 0, 0);
    else
     /// цвет границы
     drawBorderColor = borderColor;
*/    
    if (isDefault || Focused)
     drawBorderColor = activeBorderColor;
    else
     drawBorderColor = borderColor;
   
   }

   /// Запоминаем цвет границы
   borderPen.Color = drawBorderColor;

   /// Очистка
   e.Graphics.Clear(drawBackColor);

   /// Прорисовка границы
   e.Graphics.DrawRectangle(borderPen, 0, 0, ClientSize.Width - 1, ClientSize.Height - 1);

   /// Прорисовка текста кнопки
   e.Graphics.DrawString(Text, Font, new System.Drawing.SolidBrush(ForeColor), ClientRectangle, strFmt);
  }
 }

 #region IButtonControl Members

 /// <summary>
 /// Выставляет или возвращает результат диалога.
 /// </summary>
 public System.Windows.Forms.DialogResult DialogResult
 {
  get
  {
   return dialogResult;
  }
  set
  {
   dialogResult = value;
  }
 }

 /// <summary>
 /// При нажатии на кнопку.
 /// </summary>
 public void PerformClick()
 {
  if (this.CanSelect)
   this.OnClick(System.EventArgs.Empty);
 }

 /// <summary>
 /// Запрашивается главной формой, дефолтная ли кнопка.
 /// </summary>
 /// <param name="value"></param>
 public void NotifyDefault(bool value)
 {
  isDefault = value;

  Invalidate();
 }

 #endregion

 #region События, связанные с мышой
 /////////////////////////////////

 private void MyButton_MouseEnter(object sender, EventArgs e)
 {
  hovered = true;

  if (Enabled)
  {
   /// Обновить
   Invalidate();
  }
 }

 private void MyButton_MouseLeave(object sender, EventArgs e)
 {
  hovered = false;

  if (Enabled)
  {
   /// Обновить
   Invalidate();
  }
 }

 private void MyButton_MouseDown(object sender, MouseEventArgs e)
 {
  pressed = true;

  if (Enabled)
  {
   /// Обновить
   if (!Focused)
    Focus();
   else
    Invalidate();
  }
 }

 private void MyButton_MouseUp(object sender, MouseEventArgs e)
 {
  pressed = false;

  if (Enabled)
  {
   /// Обновить
   Invalidate();
  }
 }

 #endregion

 #region События, связанные с изменением состояния кнопки
 private void MyButton_EnabledChanged(object sender, EventArgs e)
 {
  Invalidate();
 }

 private void MyButton_Enter(object sender, EventArgs e)
 {
  Invalidate();
 }

 private void MyButton_Leave(object sender, EventArgs e)
 {
  Invalidate();
 }

 private void MyButton_TextChanged(object sender, EventArgs e)
 {
  Invalidate();
 }
 #endregion

 /// <summary>
 /// Обработка нажатия кнопки
 /// </summary>
 /// <param name="msg"></param>
 /// <param name="keyData"></param>
 /// <returns></returns>
 protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
 {
  if (keyData == Keys.Space)
  {
   if (CanSelect)
    OnClick(EventArgs.Empty);

   return true;
  }

  /// Обработка остальных клавиш по-умолчанию.
  return base.ProcessCmdKey (ref msg, keyData);
 }
}
}

PM MAIL   Вверх
Kurt
Дата 8.2.2004, 04:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



Цитата
написание своих контролов с нуля

А я наоборот - считал, что необходимо именно наследование от Button'a, как спрашивал mr.DUDA.
smile.gif


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
mr.DUDA
Дата 8.2.2004, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Albinos, круто !
(оффтоп) А все эти #region-ы, комментарии и теги сам вручную вставляешь, или есть какая кнопка/фича в VS ? Или это делает Visual Assist.NET smile.gif ? Спрашиваю потому, что самому лень перед каждым методом и свойством писать тег "руками", а вот если бы окошко вылазило с предложением добавить комментарий ... smile.gif

Kurt, спасибо за пример. Я нашёл свой способ как обойти "черноту" кнопки - дизайнер форм заполняет все свойства объекта значениями, указанными в конструкторе. В том числе и CurrStep. А так как при этом дизайнер не создаёт поток Thread, но зато выполняет CurrStep.set, то значение this.BackColor = m_ColorCurrent, который равен неизвестно чему.


--------------------
user posted image
PM MAIL WWW   Вверх
Albinos
Дата 11.2.2004, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 11.10.2003

Репутация: 2
Всего: 3



mr.DUDA, #region-ы сам вставляю (кстати, очень удобная штука - при сохранении файла и последующем открытии сохраняют свое состояние свернутости\развернутости), хотя наверняка возможно вставлять их как-то еще.

А вот комментарии и теги вставляются автоматически, если набрать /// .
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1353 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.