Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Автор: Mike13x13
Дата сообщения: 10.06.2008 16:12
Было бы желательно текст эксепшена, насколько я понял, вылет из-за сылки на несуществующий объект. Что-бы обойти вылет, выход простой - предварительная проверка существования:
if(DataGridView.CurrentRow.Cell[0]!=null)
Цитата:
ComboBox.SelectedValue=DataGridView.CurrentRow.Cell[0].Value;

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

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

однако try cath еще никто не отменял...
кстати говоря очень полезная вещь....
Автор: Lihonosov
Дата сообщения: 11.06.2008 23:35
Спасибо всем. Разобрался. Поставил проверку:
dataGridView1.CurrentRow!=null
Автор: Varyag_Nord
Дата сообщения: 13.06.2008 22:26
Подскажите, как в с# перевести double в int?
Автор: feor
Дата сообщения: 13.06.2008 22:49
Varyag_Nord

Код: double d = 123.5;
int i = (int)d;
Автор: Varyag_Nord
Дата сообщения: 13.06.2008 22:54
Большое спасибо,
а я поначалу пробовал, double округлить через Math.Round
а потом сконвертировать в int, но так-то оно побыстрее...
Автор: Varyag_Nord
Дата сообщения: 14.06.2008 11:04
есть такой кусок кода, как я могу вызвать первый метод из второго?
То что написано ниже дает ошибку "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();
Автор: BaluBig
Дата сообщения: 14.06.2008 11:50
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), прийдется написать много буков. А на это нет ни сил, ни времени, да и желания тоже.
Автор: Varyag_Nord
Дата сообщения: 14.06.2008 12:05
вариант номер 2, пасиб за литературу про, то что я должен передать ей агрументы я знаю.
А книжки мне надо скорее по ООП потому, как раньше дела с классами не имел...
Автор: BaluBig
Дата сообщения: 14.06.2008 18:52
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)
Автор: Varyag_Nord
Дата сообщения: 15.06.2008 14:12
Отлично, спасибо. Буду пробовать.
Автор: Varyag_Nord
Дата сообщения: 15.06.2008 22:22
Может глупый вопрос...
Как можно реализовать передачу методу static void OnTimedEvent(object source, ElapsedEventArgs e) Дополнительных аргументов?
Есть:
Код: static void OnTimedEvent(object source, ElapsedEventArgs e)
{
//Делаем некоторые действия.
Okruzhnost();
Show(g,pen,brush);
//Увеличиваем счетчик.
n++;
}
Автор: eLLoco
Дата сообщения: 16.06.2008 05:35
IMHO, проще и лучше по дизайну что-то такое написать:


Код:
static void OnTimedEvent(object source, ElapsedEventArgs e) {
Circle();

g = getGraphicsByTime(e);
pen = getPenByTime(e);
brush = getBrushByTime(e);

Show(g,pen,brush);
n++;
}
Автор: BaluBig
Дата сообщения: 16.06.2008 11:47
Varyag_Nord
Во-первых не надо static. Если обработчик события будет обычным экземплярным методом, то он прекрасно увидит поля и проперти своего экземпляра и дополнительно ничего передавать не надо.
Во-вторых я говорил о том, что все рисование лучше делать в обработчике Paint, он для этого предназначен. Для того, что бы заставить контрол парерисоваться нужно вызвать Control.Invalidate(); Тогда контрол будет перерисован при первом же удобном случае. Для того, что бы перерисовать прямо сейчас нужно вызвать последовательно Control.Invalidate(); Control.Update();
И на закуску. Перегрузка метода ничем тебе не поможет, поскольку вызывающий этот метод компонент ничего не знает о ней и знать не может.

eLLoco
Отмотай тред чуть назад, будет понятно зачем это ему.
Автор: TeXpert
Дата сообщения: 16.06.2008 15:03
BaluBig
Цитата:
Во-первых не надо static. Если обработчик события будет обычным экземплярным методом...
А я вот думаю User-контролу, наследнику RichTextBox, присобачить стандартное контекстное меню ("Вырезать", "Копировать"-"Вставить"). Интересно, если его сделать static, выигрыш будет существенным?
Автор: BaluBig
Дата сообщения: 16.06.2008 16:31
TeXpert
Выигрыш в чем? В быстродействии? Будет, несомненно. Но ты же не десятки раз в секунду меню открываешь => выигрыш этот никому не нужен.
Автор: TeXpert
Дата сообщения: 16.06.2008 16:44
BaluBig
Цитата:
Выигрыш в чем? В быстродействии?
Ну ясно, не об этом -- в таких приложениях это не самое главное. Я думал, очевидно, что речь об использовании памяти и ещё о размере кода -- особенно, когда много таких компонент в приложении.
Автор: BaluBig
Дата сообщения: 16.06.2008 20:28
TeXpert
Ага. Т.е ты о самом меню. Которое одинаковое для всех компонентов. В таком случае само это меню, реализованное в виде статической проперти, какую-то экономию даст. Стоит ли возиться - я затрудняюсь ответить Поэкспериментировать можно. И навскидку я что-то не соображу как имея сатическое меню различать в обработчике клика в каком именно экземпляре компонента по меню кликнули.
Автор: TeXpert
Дата сообщения: 16.06.2008 20:44
BaluBig
А я уже нестатический добавил -- exe-файл вырос примерно на 2 kb, это терпимо). Просто, я привык писать на C и WinAPI, и уже привычка бороться за каждый байт. Жадность, видишь ли. Да и памяти шоб поменьше уходило. Но со статическим как-нибудь поэкспериментирую.
Автор: Lihonosov
Дата сообщения: 18.06.2008 03:25
Есть форма. На ней несколько текстбоксов и dataGridView, которые связаны с одним датасетом. А также есть кнопка Button1 в обработчике на онклик которой написано:

Код: oracleDataAdapter.Update(dataSet1);
dataset1.Clear();
oracleDataAdapter.Fill(dataSet1);
Автор: BaluBig
Дата сообщения: 18.06.2008 09:49
Lihonosov
Насколько мне видится, ты собираешься сделать некий грид с записями, при этом текущая запись грида отображалась бы в контролах для редактирования. Почему бы в контролах не использовать Data Binding? А проверку корректности данных делать на событии Validating контрола (оно для этого как раз и сделано), а не на Leave. Уйдет куча ручной работы...
Автор: Lihonosov
Дата сообщения: 18.06.2008 17:52
BaluBig

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

Да

Цитата:
Почему бы в контролах не использовать Data Binding?

У меня каждый текстбокс связан с датасет. Это?
Цитата:
А проверку корректности данных делать на событии Validating контрола (оно для этого как раз и сделано)

Попробую.
Автор: BaluBig
Дата сообщения: 20.06.2008 10:15
Lihonosov

Цитата:
У меня каждый текстбокс связан с датасет. Это?
Оно самое. Ты бы тестовый проектик написал и сюда его... А то как-то на пальцах не совсем понятно... Оракл к этому точно никакого отношения не имеет, так что источник данных может быть любым, например mdb.
Автор: SergBSI
Дата сообщения: 21.06.2008 07:50
Вопрос полного чайника в NET - подскажите пример чтения-записи на физичеком уроне на винт API - фокусы здесь не почемуто не проходят
Автор: TeXpert
Дата сообщения: 21.06.2008 14:21
SergBSI
Цитата:
Вопрос полного чайника в NET - подскажите пример чтения-записи на физичеком уроне
Так "урон" всё-таки физический или моральный? Елы-палы, неужели нельзя яснее выражаться? Что это означает
Цитата:
...винт API
Нету никакого "винтAPI". А пример
Цитата:
фокусы здесь не почемуто не проходят
привести было слабо? Тебе, наверное, сюда: http://forum.ru-board.com/topic.cgi?forum=2&bm=1&topic=2359&start=900#lt
А так -- осваивай Windows DDK, там много интересного
Автор: BaluBig
Дата сообщения: 21.06.2008 17:11
TeXpert
Перевожу на русский язык
Цитата:
Вопрос полного чайника в NET: подскажите пример чтения-записи на физичеком уровне на винт. API - фокусы здесь не почему-то не проходят.


SergBSI
Пренебрегать знаками препинания недостойно программиста
А теперь по теме. Какие имеено фокусы не проходят? Из нета возможен вызов любых функций из любых библиотек. Все Win32 API доступно. Есть такой сайт http://www.pinvoke.net. Там собраны нетовские конструкции для прямого использования большинства старых API. Еще есть такая программа SeaTools for Windows. Программа - полное гуано, но написано оно на нете и по идее должно общаться с винтом на достаточно низком уровне. Если поковыряться в ней с помощью рефлектора, то можно, я думаю, нарыть немало интересного.
Автор: recvezitor
Дата сообщения: 24.06.2008 04:22
Приветствую. Я ищу какие нибудь компоненты, желательно под .Net, которые умели бы "рисовать карты". Как это будет поисходить я пока не представляю даже теоретически. Возможно просто рисовала бы картинку по заданным координатам, а на эту картинку можно было бы наложить какуюнибдуь линию - маршрут. Если все это дело будет бесплатным будет просто великолепно.
Автор: bsdfish
Дата сообщения: 25.06.2008 16:50
SergBSI
Если PInvoke пользоваться неудобно, то можно написать промежуточный слой на C++\CLI а уже с ним работать на C#.
Автор: Yakon
Дата сообщения: 26.06.2008 10:44
Вопрос по Visual Basic 2005:

If My.Computer.FileSystem.FileExists(FileName_ini) Then
txt_ini = System.IO.File.ReadAllLines(FileName_ini)
Shell("C:\3D\3DSmediaplayer.exe ~""C:\3D\playlist_" & txt_ini(0) & ".3dpl", AppWinStyle.MaximizedFocus, False)
End If

Это программа работаетв фоновом режиме.
Проблема в том, что программа нормально запускает плейер, но после её завершения фокус плейеру не передается.
Фокус остается на окне, на котором был фокус до запуска программы.
Как передать фокус?

Добавлено:
Sub Main()
Dim txt_ini() As String
Dim FileName_ini As String = "c:\3D\client.ini"
If My.Computer.FileSystem.FileExists(FileName_ini) Then
txt_ini = System.IO.File.ReadAllLines(FileName_ini)
Dim tmp As String = "C:\3D\3DSmediaplayer.exe"
Dim tmp2 As String = "~""C:\3D\playlist_" & txt_ini(0) & ".3dpl"""
Dim startInfo As New ProcessStartInfo(tmp)
startInfo.WindowStyle = ProcessWindowStyle.Normal
Dim Proc As Process = Process.Start(startInfo)
System.Threading.Thread.Sleep(2000)
AppActivate(Proc.Id)
End If
End Sub

Так тоже самое.
Как победить? Запущенный плейер не имеет фокуса, мне нужно чтоб он был первым окном.
Автор: Mike13x13
Дата сообщения: 26.06.2008 15:27
Yakon
В дополнение ко всему попробуй свернуть свое приложение, по идее плеер должен остаться сверху.
Сорри, не заметил, что твое приложение в фоне. Тады попробуй перевести на фон/свернуть активное окно.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102

Предыдущая тема: Как удалить/добавить/отключить/включить устройство?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.