Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
13 / 13 / 3
Регистрация: 05.06.2015
Сообщений: 93

Получение данных контрола из строковой переменной

09.07.2016, 01:13. Показов 1386. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в программу загружаются определенным образом подготовленные строки для работы с конкретным datagridview
как заставить программу считать из этой строки координаты ячеек datagridview и действия с ними

напрмиер строка такого типа:
VB.NET
1
sStr="1: [2]+[4]+[5]-[11]>[3]-[6]"
сначала столбец, его от выражения отделяет постоянный разделитель ": "
знак в выражении может быть >,>=,<,<=,=
с каждой стороны от знака произвольное количество элементов с произвольным знаком + или - . Номер элемента может быть одно или двухзначным.
каэжый элемент столбца обрамлен квадратными скобками. убрать их проблемы нет, но они изначально есть и может быть это тоже как-то использовать.

как преобразовать в формулу, которая должна проверить столбец 1 datagridview чтобы сумма ячеек 2+4+5-11 была больше чем то, что содержится в ячейке 3-6?
строго говоря после преобразования этой строки должно получаться
VB.NET
1
dgw.item(0,1).value+dgw.item(0,3).value+dgw.item(0,4).value-dgw.item(0,10).value>dgw.item(0,2).value-dgw.item(0,5).value
ну и возвращаться должно значение boolean, выполняется условие или нет...

я вообще не представляю как к этому делу приступать, с чего начать...
буду благодарен за любую помощь...
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.07.2016, 01:13
Ответы с готовыми решениями:

Получение данных из чужого datagridview и кастомного контрола
Уважаемые форумчане может кто подскажет как это сделать - хотелось бы организовать взаимодействие моего и чужого приложения выводящего...

Использовать значение строковой переменной как имя новой переменной
Есть некий объект (ob = ) и строка (st =&quot;name&quot;). Так вот нужно, чтобы name стало именем объекта ob. То есть &gt;&gt;&gt;name ...

Как получить/установить значение переменной по названию (название берется из строковой переменной)
собственно сабж

4
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
09.07.2016, 14:39
начать с условия... это и будет основа фугкции. это условие и вернет ответ True или False

Добавлено через 47 секунд
Цитата Сообщение от LEonardo_ Посмотреть сообщение
сначала столбец, его от выражения отделяет постоянный разделитель ": "
тоесть строка всегда одна с таблице?

Добавлено через 2 минуты
покажите скриншот таблицы для этой строки:
VB.NET
1
sStr="1: [2]+[4]+[5]-[11]>[3]-[6]"
а то вы условие очень непонятно написали, что зачем и куда... все понятно и решаемо, но вот где строка и где столбец - размыто как-то
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
09.07.2016, 16:51
Вариант
VB.NET
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
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    Dim condi As String = Label1.Text
    Dim expr() As String = condi.Split({"<"c, ">"c, "="c}, StringSplitOptions.RemoveEmptyEntries)
    Dim ss1() As String = expr(0).Split({"]"c, "["c}, StringSplitOptions.RemoveEmptyEntries)
    Dim ss2() As String = expr(1).Split({"]"c, "["c}, StringSplitOptions.RemoveEmptyEntries)
    Dim cnd As String = ""
    If condi.Contains(">") Then cnd += ">"
    If condi.Contains("<") Then cnd += "<"
    If condi.Contains("=") Then cnd += "="
    For i = 0 To DataGridView1.Rows.Count - 2
        DataGridView1.Rows(i).Cells(0).Value = getBValue(ss1, ss2, cnd, i).ToString
    Next
End Sub
Private Function getBValue(ByVal s1() As String, ByVal s2() As String, ByVal cn As String, ByVal jj As Integer) As Boolean
    Dim rw As DataGridViewRow = DataGridView1.Rows(jj)
    Dim r1 As Integer = getValue(s1, rw)
    Dim r2 As Integer = getValue(s2, rw)
    Dim bb As Boolean
    Select Case cn
        Case ">"
            bb = r1 > r2
        Case "<"
            bb = r1 < r2
        Case "="
            bb = r1 = r2
        Case "<>"
            bb = r1 <> r2
        Case ">="
            bb = r1 >= r2
        Case "<="
            bb = r1 <= r2
        Case Else
    End Select
    Return bb
End Function
Private Function getValue(ByVal ss() As String, ByVal rr As DataGridViewRow) As Integer
    Dim sum As Integer = CInt(ss(0))
    For i = 1 To ss.Length - 1 Step 2
        Select Case ss(i)
            Case "+"
                sum += CInt(rr.Cells((CInt(ss(i + 1)) - 1)).Value)
            Case "-"
                sum -= CInt(rr.Cells((CInt(ss(i + 1)) - 1)).Value)
            Case Else
        End Select
    Next
    Return sum
End Function
Миниатюры
Получение данных контрола из строковой переменной  
3
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
09.07.2016, 22:05
Лучший ответ Сообщение было отмечено LEonardo_ как решение

Решение

В функции getValue замените первую строку на
VB.NET
1
Dim sum As Integer = CInt(rr.Cells(CInt(ss(0)) - 1).Value)
Для удобства весь код можно оформить как класс
VB.NET
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
Public Class Calculator
    Private _str As String
    Private ss1(), ss2() As String
    Private cnd As String = ""
    Public Sub New(ByVal str As String)
        _str = str
        Dim expr() As String = _str.Split({"<"c, ">"c, "="c}, StringSplitOptions.RemoveEmptyEntries)
        ss1 = expr(0).Split({"]"c, "["c}, StringSplitOptions.RemoveEmptyEntries)
        ss2 = expr(1).Split({"]"c, "["c}, StringSplitOptions.RemoveEmptyEntries)
        If _str.Contains(">") Then cnd += ">"
        If _str.Contains("<") Then cnd += "<"
        If _str.Contains("=") Then cnd += "="
    End Sub
    Public Function Calculate(ByVal rr As DataGridViewRow) As Boolean
        Dim bb As Boolean
        Dim r1 As Integer = getValue(ss1, rr)
        Dim r2 As Integer = getValue(ss2, rr)
        Select Case cnd
            Case ">"
                bb = r1 > r2
            Case "<"
                bb = r1 < r2
            Case "="
                bb = r1 = r2
            Case "<>"
                bb = r1 <> r2
            Case ">="
                bb = r1 >= r2
            Case "<="
                bb = r1 <= r2
            Case Else
        End Select
        Return bb
    End Function
    Private Function getValue(ByVal ss() As String, ByVal rr As DataGridViewRow) As Integer
        Dim sum As Integer = CInt(rr.Cells(CInt(ss(0)) - 1).Value)
        For i = 1 To ss.Length - 1 Step 2
            Select Case ss(i)
                Case "+"
                    sum += CInt(rr.Cells((CInt(ss(i + 1)) - 1)).Value)
                Case "-"
                    sum -= CInt(rr.Cells((CInt(ss(i + 1)) - 1)).Value)
                Case Else
            End Select
        Next
        Return sum
    End Function
End Class
Тогда обращение будет выглядеть как
VB.NET
1
2
3
4
5
6
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
    Dim calc As New Calculator(Label1.Text)
    For i = 0 To DataGridView1.Rows.Count - 2
        DataGridView1.Rows(i).Cells(0).Value = calc.Calculate(DataGridView1.Rows(i)).ToString
    Next
End Sub
4
13 / 13 / 3
Регистрация: 05.06.2015
Сообщений: 93
09.07.2016, 22:13  [ТС]
Цитата Сообщение от Yury Komar Посмотреть сообщение
тоесть строка всегда одна с таблице?
нет их несколько и таблиц несколько... по каждой свои проверочные соотношения, которые получаются заранее
при формировании списка необходимых значений из стандартного приложения,
я же хотел автоматизировать дальнейшую обработку ввод и проверку данных не глазами(тк все мы люди, и иногда плохо считаем) а программно...

Цитата Сообщение от Yury Komar Посмотреть сообщение
покажите скриншот таблицы для этой строки:
к сожалению не могу, нет с собой, но могу попробовать нарисовать аналог для понимания
(с одним столбиком например) таблица такая:
Кликните здесь для просмотра всего текста
Загруженные строки: |Введенные пользователем значения:
введите значение: |1
введите значение: |2
введите значение: |3
введите значение: |4
введите значение: |5
введите значение: |6
введите значение: |7
======================================== =
проверочные соотношения |выполнение проверочных соотношений(именно эти значения надо получить
чтобы показать пользователю, что он правильно все заполнил)
1: [2]+[4]+[5]-[1]>[3]-[6] |True
1: [2]=[6] |False
1: [7]>=[5]+[2] |True


Цитата Сообщение от ovva Посмотреть сообщение
Вариант
спасибо...
получается все равно надо анализировать каждый символ входной строки... я предполагал это... но пытался делать
менее эффективно...
ну да, только мне надо разбирать колонку, но я переделаю для себя конечно сам)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.07.2016, 22:13
Помогаю со студенческими работами здесь

Возможно ли обращение к переменной с использованием значения строковой переменной?
Есть структура из 20ти различных элементов. Необходимо сформировать строковую переменную, которая бы содержала названия переменных и их...

Со строковой переменной
Задано предложение. Найти слово с наименьшим числом букв. Параметр переменной - строковый.

Задача со строковой переменной
помогите кто может...вот задание &quot;Создать программу, анализирующую правильность записи арифметического выражения с точки зрения синтаксиса...

Разделение строковой переменной
Доброго всем дня! Возник вопрос: в Input Box введены 3 числа через &quot;;&quot;, допустим 3;14;26... Как сделать так, чтобы данные значения...

Разделение строковой переменной
Помогите, пожалуйста, справиться с такой задачей: Например, переменная &quot;a&quot; содержит слово из восьми букв (при этом слово не известно). Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru