Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162

Открыть новую тему     Написать ответ в эту тему

TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lihonosov  
Ну ясно же, заголовок -- это тоже Row, вот и отсеки

----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 17:06 10-06-2008
Mike13x13



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Было бы желательно текст эксепшена, насколько я понял, вылет из-за сылки на несуществующий объект. Что-бы обойти вылет, выход простой - предварительная проверка существования:  
if(DataGridView.CurrentRow.Cell[0]!=null)
Цитата:
    ComboBox.SelectedValue=DataGridView.CurrentRow.Cell[0].Value;

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

Всего записей: 93 | Зарегистр. 13-09-2007 | Отправлено: 17:12 10-06-2008 | Исправлено: Mike13x13, 17:17 10-06-2008
LuckyManX

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
но если клацнуть по заголовку столбца, чтобы изменить сортировку, то программа вылетает с ошибкой:

однако try cath еще никто не отменял...
кстати говоря очень полезная вещь....

Всего записей: 7 | Зарегистр. 10-02-2008 | Отправлено: 19:05 11-06-2008
Lihonosov

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо всем. Разобрался. Поставил проверку:
dataGridView1.CurrentRow!=null

Всего записей: 537 | Зарегистр. 05-07-2007 | Отправлено: 00:35 12-06-2008
Varyag_Nord



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите, как в с# перевести double в int?

Всего записей: 9 | Зарегистр. 05-06-2008 | Отправлено: 23:26 13-06-2008 | Исправлено: Varyag_Nord, 23:28 13-06-2008
feor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Varyag_Nord

Код:
double d = 123.5;
int i = (int)d;

 
или
 

Код:
double d = 123.5;
int i = Convert.ToInt32(d);

 
Такое преобразование ведет к потере точности. Причем обрати внимание, в первом случае дробная часть просто отбрасывается, во втором идет округление по математическим правилам, так что в этих примерах значения i будут различны.

Всего записей: 164 | Зарегистр. 04-09-2005 | Отправлено: 23:49 13-06-2008
Varyag_Nord



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Большое спасибо,
а я поначалу пробовал, double округлить через Math.Round
а потом сконвертировать в int, но так-то оно побыстрее...

Всего записей: 9 | Зарегистр. 05-06-2008 | Отправлено: 23:54 13-06-2008
Varyag_Nord



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
есть такой кусок кода, как я могу вызвать первый метод из второго?
То что написано ниже дает ошибку "No overload for method 'Show' takes '0' arguments"
 

Код:
 public void Show(Graphics g, Pen pen, Brush brush)//Прорисовка точек
        {
            int tempX=0, tempY=0;
            Point[] tochka =  
                {
                    new Point(x1, y1)
                };
            if(x1!=0 && y1!=0 && tempX!=0 && tempY!=0) g.DrawLines(pen, tochka);
            tempX = x1;
            tempY = y1;
            g.DrawLines(pen, tochka);
             
        }
         public void Okruzhnost()
        {
            x1 = Convert.ToInt32(x + R * Math.Cos(alfa));//Вычисляем координаты для окружности.
            y1 = Convert.ToInt32(y + R * Math.Sin(alfa));
            MoyTimer();
            x += 1;
            y += 1;
            Show();  

Всего записей: 9 | Зарегистр. 05-06-2008 | Отправлено: 12:04 14-06-2008
BaluBig



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Varyag_Nord
Тут надо определиться: тебе нужно "сдать и забыть" или хочешь действительно разобраться. Для первого варианта - про объявление на столбе говорили уже. Для второго:
1. Читать любую базовую книжку по C# и программированию на языках высокого уровня вообще до тех пор, пока не станет понятно почему public void Show(Graphics g, Pen pen, Brush brush) не может быть вызыван как Show();
2. По поводу программирования графики почитать Поляков А.Ю., Брусенцев В.А. Программирование графики: GDI+ и DirectX,
а так же  
http://www.rsdn.ru/article/gdi/gdiplus1.xml
http://www.rsdn.ru/article/gdi/gdiplus2.xml
http://www.rsdn.ru/article/gdi/gdiplus3.xml
http://www.bobpowell.net/faqmain.htm
 
А учиться основам на форуме нельзя. Например, что бы рассказать как практически воспользоваться методом public void Show(Graphics g, Pen pen, Brush brush), прийдется написать много буков. А на это нет ни сил, ни времени, да и желания тоже.

Всего записей: 404 | Зарегистр. 06-02-2004 | Отправлено: 12:50 14-06-2008 | Исправлено: BaluBig, 12:52 14-06-2008
Varyag_Nord



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
вариант номер 2, пасиб за литературу про, то что я должен передать ей агрументы я знаю.
А книжки мне надо скорее по ООП потому, как раньше дела с классами не имел...

Всего записей: 9 | Зарегистр. 05-06-2008 | Отправлено: 13:05 14-06-2008
BaluBig



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Varyag_Nord
ОК.  
Тогда так. Прежде всего тебе нужен объект Graphics. Его можно создать "насильно" через метод CreateGraphics интересующего контрола (на поверхности которого соберемся рисовать). Но как правило это не нужно, т.к. все рисование мы должны выполнять в обработчике события Paint интересующего нас контрола, а там объект Graphics передается в классе аргументов события (PaintEventArgs). Pen и Brush нужно создать самостоятельно, при чем за этими объектами стоят небесконечные неуправляемые ресурсы, поэтому их нужно создавать как можно меньше и вовремя освобождать вызовом Dispose.
Еще. Объект Graphics отлично умеет работать с координатами, выраженными вещественными числами, поэтому при рисовании не стоит заморачиваться с округлением. Для работы с координатами в вещественных числах имеются соответствующие структуры: PointF, RectangleF, SizeF итд. Соответственно методы для рисования имеют перегрузки для работы с вещественными числами. На примере Graphics.DrawLine:
DrawLine(Pen, Point, Point)  
DrawLine(Pen, PointF, PointF)  
DrawLine(Pen, Int32, Int32, Int32, Int32)  
DrawLine(Pen, Single, Single, Single, Single)

Всего записей: 404 | Зарегистр. 06-02-2004 | Отправлено: 19:52 14-06-2008
Varyag_Nord



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Отлично, спасибо. Буду пробовать.

Всего записей: 9 | Зарегистр. 05-06-2008 | Отправлено: 15:12 15-06-2008 | Исправлено: Varyag_Nord, 15:13 15-06-2008
Varyag_Nord



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Может глупый вопрос...
Как можно реализовать передачу методу static void OnTimedEvent(object source, ElapsedEventArgs e) Дополнительных аргументов?
Есть:
Код:
static void OnTimedEvent(object source, ElapsedEventArgs e)
        {
            //Делаем некоторые действия.
            Okruzhnost();
            Show(g,pen,brush);
            //Увеличиваем счетчик.
            n++;
        }

Надо чтобы можно было сделать вот так:

Код:
static void OnTimedEvent(object source, ElapsedEventArgs e,Graphics g, Pen pen, Brush brush)
        {
            //Делаем некоторые действия.
            Okruzhnost();
            Show(g,pen,brush);
            //Увеличиваем счетчик.
            n++;
        }


 
Добавлено:
я так думаю надо перегрузить метод?

Всего записей: 9 | Зарегистр. 05-06-2008 | Отправлено: 23:22 15-06-2008 | Исправлено: Varyag_Nord, 23:28 15-06-2008
eLLoco



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IMHO, проще и лучше по дизайну что-то такое написать:
 

Код:
 
static void OnTimedEvent(object source, ElapsedEventArgs e) {
    Circle();
 
    g = getGraphicsByTime(e);
    pen = getPenByTime(e);
    brush = getBrushByTime(e);
 
    Show(g,pen,brush);
    n++;
}  
 

 
Это если я правильно понял, что тебе в зависимости от времени нужно получать разные графикс и pen/brush. А вообще, неплохо бы написать зачем тебе это .

Всего записей: 217 | Зарегистр. 03-08-2007 | Отправлено: 06:35 16-06-2008
BaluBig



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Varyag_Nord
Во-первых не надо static. Если обработчик события будет обычным экземплярным методом, то он прекрасно увидит поля и проперти своего экземпляра и дополнительно ничего передавать не надо.
Во-вторых я говорил о том, что все рисование лучше делать в обработчике Paint, он для этого предназначен. Для того, что бы заставить контрол парерисоваться нужно вызвать Control.Invalidate(); Тогда контрол будет перерисован при первом же удобном случае. Для того, что бы перерисовать прямо сейчас нужно вызвать последовательно Control.Invalidate(); Control.Update();
И на закуску. Перегрузка метода ничем тебе не поможет, поскольку вызывающий этот метод компонент ничего не знает о ней и знать не может.
 
eLLoco
Отмотай тред чуть назад, будет понятно зачем это ему.

Всего записей: 404 | Зарегистр. 06-02-2004 | Отправлено: 12:47 16-06-2008 | Исправлено: BaluBig, 12:53 16-06-2008
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BaluBig
Цитата:
Во-первых не надо static. Если обработчик события будет обычным экземплярным методом...
А я вот думаю User-контролу, наследнику RichTextBox, присобачить стандартное контекстное меню ("Вырезать", "Копировать"-"Вставить"). Интересно, если его сделать static, выигрыш будет существенным?

----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 16:03 16-06-2008
BaluBig



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
TeXpert
Выигрыш в чем? В быстродействии? Будет, несомненно. Но ты же не десятки раз в секунду меню открываешь => выигрыш этот никому не нужен.

Всего записей: 404 | Зарегистр. 06-02-2004 | Отправлено: 17:31 16-06-2008
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BaluBig
Цитата:
Выигрыш в чем? В быстродействии?
Ну ясно, не об этом -- в таких приложениях это не самое главное. Я думал, очевидно, что речь об использовании памяти и ещё о размере кода -- особенно, когда много таких компонент в приложении.

----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 17:44 16-06-2008
BaluBig



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
TeXpert
Ага. Т.е ты о самом меню. Которое одинаковое для всех компонентов. В таком случае само это меню, реализованное в виде статической проперти, какую-то экономию даст. Стоит ли возиться - я затрудняюсь ответить Поэкспериментировать можно. И навскидку я что-то не соображу как имея сатическое меню различать в обработчике клика в каком именно экземпляре компонента по меню кликнули.

Всего записей: 404 | Зарегистр. 06-02-2004 | Отправлено: 21:28 16-06-2008
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BaluBig  
А я уже нестатический добавил -- exe-файл вырос примерно на 2 kb, это терпимо). Просто, я привык писать на C и WinAPI, и уже привычка бороться за каждый байт. Жадность, видишь ли. Да и памяти шоб поменьше уходило. Но со статическим как-нибудь поэкспериментирую.

----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 21:44 16-06-2008
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru