| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Проблема со StringGrid |
| Автор: ilnur 14.1.2008, 17:16 | ||||
| привет. 1. загружаю файл в мемо, файл примерно такого типа 1 2 3 4 5 2 3 4 6 445 556 4 445 445 4 далее считываю и загружаю нужную мне инфу из мемо в стринггрид. вот так:
проблема в том, что когда мы находим 445, то а1=445, а2=556, а3=4, а а4=6, т.е. оно берется из предыдущей строки, а мне надо чтоб если нету 4 числа, то в а4 было пусто и в стринг грид ничего не записывалось. 2. после того как загрузили инфу в стринг грид, пользователь выделяет какую то строку. значение 1 ячейки строки я вывожу в едит. в едит у меня прописано вот что:
т.е. при изменении едит значение в стринггриде тоже должно меняться. НО!после всех этих манипуляции, если пользователь выделит след строку, то значение едит будет = значению новой строки. а значение 1 ячйки предыдущей выделенной строки будет равняться значению 1 ячейки выбранной строки. надеюсь понятно объяснил. |
| Автор: ama_kid 14.1.2008, 17:29 |
| не совсем... перед считыванием обнулять переменные не пробовал? По второму пункту - я мало что понял, понял только что программа ведет себя так, как ты ей запрограммировал, осталось только понять что же ты хотел |
| Автор: ilnur 14.1.2008, 17:42 | ||||
так. теперь значение = 0, т.е. в стринг грид пишутся 0. а мне надо чтобы было пусто. для того чтобы при сохранении структура файла сохранялась
в общем вот. exe файл. попробуйте открыть 1.txt, он в архиве. и выделяя строки смотрите пердыдущую строку, 3 ячейку http://webfile.ru/1683714 |
| Автор: artsb 14.1.2008, 17:57 | ||||||
Тогда пишите:
И потом перед вставкой проверяйте чему равно значение переменной. Если "-1", то ничего не вставляете. Добавлено через 4 минуты и 18 секунд А вообще, попробуйте так: Объявите переменные как AnsiString
и пишите:
Остальное как есть. P.S. только я не помню, для AnsiString %s или нет... |
| Автор: ilnur 14.1.2008, 18:30 | ||||
сдела так. всё работает. спасибо. а как быть со второй проблемой? |
| Автор: ama_kid 14.1.2008, 18:38 | ||
смотри обработчик StrinGrid.OnClick - это там у тебя косячит что-то...
|
| Автор: ilnur 14.1.2008, 18:43 | ||||||
только не в OnClick, а в OnSelectCell, вот что у меня там:
т.е. чтоб значения записывались в едиты. далее пользователь может их изменить. в едите у меня вот такой обработчик:
чтобы изменения сохранялись сразу в стринггриде. |
| Автор: artsb 14.1.2008, 18:45 | ||
А вы это пробовали:
Может так даже лучше будет. Не нужно никаких проверок. |
| Автор: ama_kid 14.1.2008, 18:51 |
| ilnur, у тебя обработчики зациклены: обработчик OnSelectCell вызывается до смены ячейки, вызывая изменение текста в Edit'е, а тот в свою очередь вызывает изменение в текущей (еще не измененной ячейке)... |
| Автор: ilnur 14.1.2008, 18:54 | ||
| artsb, пробовал только при работе exe вылетала ошибка. наверное всё таки не %s s - строка символ. тип аргумента функции - char arg[] вот что нашёл в книжке архангелького. больше ничего. а самя не пойму что это значит Добавлено через 1 минуту и 1 секунду
|
| Автор: ama_kid 14.1.2008, 19:03 |
| у тебя в OnSelectСell нет никакого кода, специфичного для этого обработчика (нет специальных проверок на возможность выбора ячейки) - следовательно просто юзай OnClick - он вроде вызывается после смены ячейки... |
| Автор: ilnur 14.1.2008, 19:15 | ||
| ama_kid, ясно спасибо. вроде всё теперь работает как надо. просто через поиск нашёл тот код, который был на OnSelectСell подправил только вот это:
|
| Автор: artsb 14.1.2008, 19:29 | ||||
Я посмотрел справку. Попробуйте так:
Должно работать... |
| Автор: ilnur 14.1.2008, 19:49 | ||||
artsb,
так? всё равно такая ошибка вылетает. ну ладно оставлю вот так:
так работает. |
| Автор: artsb 14.1.2008, 20:02 | ||
Придумал ещё лучше!
|