tebdilikiyafet Ответов: 1

Пользовательский элемент управления с пользовательским свойством выбора из объекта класса


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

Например, общественные bool1,
public bool2 и т. д.

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

Я работаю над WindowsForm.
Как я могу это сделать?

Что я уже пробовал:

Скриншот то что мне нужно : пример — Postimage.org[^]

Richard Deeming

Вы планировали рассказать нам, какой из множества фреймворков пользовательского интерфейса вы используете?
(Windows Forms, WPF, ASP.NET веб-формы, ASP.NET MVC, ASP.NET ядро, Xamarin и т. д.)

У них у всех есть своя версия RadioButton, и процесс написания пользовательского элемента управления будет совершенно разным для каждого.

tebdilikiyafet

О, как жаль. Я работаю над WindowsForm и использую VisualStudio.

[no name]

"Мне нужен пример кода для этого", gimme code - это не вопрос. То, что, как я думаю, вы хотите сделать из своего запутанного описания, называется привязкой данных.

tebdilikiyafet

Как я могу это сделать?
Это вопрос? Я сказал, что работал над этим целую неделю. Если бы у меня был ключ к пониманию того, как это может быть, я бы спросил об этом.

Ralf Meier

Я не понял вашего требования.
Возможно, вам следует объяснить свой контроль (который вы хотите создать), его свойство (или свойства) и то, что должно произойти с ними.
Также может быть полезен скриншот или еще какой-нибудь код.
Я очень хорошо знаком с настройкой элементов управления, но с вашим описанием я не знаю, что делать ...

tebdilikiyafet

Я добавил скриншот того, что мне нужно : https://postimg.org/image/5f1gkagk3/

Ralf Meier

То,что я вижу, - это Радиобаттон на бланке.
Нет никакой разницы в стандарте-Радиобуттон.
Но я попросил вас также объяснить ваше требование.
Что я видел :
у вас есть свойство под названием PLC-Var-do you want to created a .Нетто-Чми ? К какому ПЛК вы хотите подключиться ?
Чтобы сделать шаг вперед, важно, чтобы вы ответили на каждый вопрос как можно более полно ...

tebdilikiyafet

Да, нет никакой разницы в визуализации. У меня есть много сигналов для отображения,и я хочу сделать это с помощью переключателей. Мои сигналы логические, и я читаю их с OPC-сервера (KEPWARE). Теперь я хочу связать переключатель и сигнал одним щелчком мыши. Поэтому я хочу добавить пользовательское свойство в radiobutton. Да, я хочу сделать .Чистый HMI для ПЛК siemens S7300 - S71500 и beckhoff.
Обновленный скриншот : https://postimg.org/image/3tls32bh7/

Ralf Meier

Таким образом, вы хотите создать UserControl с несколькими Радиокнопками на нем.
Каждый из переключателей должны соответствовать свойство пользовательского элемента управления ?

Чтобы подключить ПЛК, вам нужно назначить переменное имя внутри ПЛК вашему Радиобуттону. Обычно это происходит с помощью своего рода Itemserver, который дает вам уведомление (событие), информирующее вас о том, что связанная переменная изменила свое значение.
Но я не знаю вашего OPC-сервера ... : (поддерживает ли он все 3 типа ПЛК ? Я надеюсь, вы знаете, что S7-300 отличается от S7-1500 (TIA), и оба они полностью отличаются от Beckhoff-PLC (ADS-Communication).

tebdilikiyafet

Сначала я прочитал все переменные из ПЛК с помощью переменных C #. Так что способ общения не важен. Я использую Kepware и ADS для связи. Я могу их сделать. Но мне нужна помощь, чтобы просто их отобразить. На C # много логических сигналов, и я хочу отображать их состояние с помощью radioButtons отдельно. У каждого сигнала будет своя собственная радиокнопка. Таким образом, на моем настраиваемом элементе управления будет только одна радиокнопка. И я свяжу это с логическим значением, используя область свойства. Например, в C # есть логическое значение, которое называется «bAirPressureIsOK». Он обновляет свой статус при каждом чтении из ПЛК. Здесь все нормально. Теперь я хочу связать это с переключателем на visualstudio designtime. Я перетащу радиокнопку в свою форму и выберу логическое значение bAirPressureIsOK из раскрывающегося списка. Этот раскрывающийся список покажет мне все логические значения в качестве опции.

Ralf Meier

Я понимаю ваше требование, потому что я также работаю в области автоматизации.
Но вы должны обдумать свой путь.
Теперь у вас есть метод (я думаю), который осуществляет связь с ПЛК и считывает все необходимые переменные в ваше приложение, чтобы все они были как C # -переменные. Но это ничего не меняет на вашем экране, потому что нет существующего соединения между вашими элементами управления (например, радиокнопкой) и переменными. Теперь вы можете сделать следующее: вы знаете элемент управления, который должен отображать состояние или значение переменной, и внутри вашего метода PLC_Read вы назначаете этим элементам управления соответствующие значения. Это способ, который можно было бы сделать ... но это не лучший способ. Лучше всего: вы создаете связь между переменной и элементом управления. В этом случае переменная автоматически манипулирует элементом управления, чтобы показать его значение. Эту работу обычно выполняют события ... и вам нужен список, в котором зарегистрирован каждый активный элемент управления, а также переменная, которую он должен использовать. Этот метод я назвал «Item-Server».
Если вы хотите пойти этим путем (я думаю, что это единственный возможный путь) Я мог бы попытаться помочь тебе ...
Но... сначала вы должны понять, как работает .Net (а также элементы управления)...

1 Ответов

Рейтинг:
2

User 11061201

Конечно, вы должны реализовать свое собственное проверенное/непроверенное логическое свойство в пользовательском элементе управления, в данном случае RadioButton. Но проверенное свойство должно быть реализовано внутри вашего пользовательского UserControl, а не в другом классе.
Затем вы можете выбрать Использование Radibutton в вашем элементе управления MyRadiButton, производном от UserControl, или сделать это с помощью System.Методов рисования, чтобы нарисовать круг и нарисовать текст, обозначающий свойство text. Все это слишком сложно для новичка, но вы можете найти пример в Интернете.

Вот какой код для начала:

Public Class MyRadioButton : Inherits UserControl

Private _Checked As Boolean
Property Checked As Boolean
 Get : Return _Checked : End Get
 Set(value As Boolean) 
   _Checked = value 
   EnableDisable(New PaintEventArgs(Me.CreateGraphics)) 
 End Set
End Property


Sub New()
  '//
End Sub

Protected Sub EnableDisable(e As PaintEventArgs)
   If Checked Then
    'e.graphics.fillellipse(draw/fill a circle)
   Else
    'e.graphics.drawellipse(draw circle)
   End If
   'e.graphics.drawstring(draw string of Me.Text Property)
End Sub

Protected Overrides Sub OnPaint(e As PaintEventArgs)
    EnableDisable(e)
End Sub
End Class