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

Я разработал Пользовательский элемент управления в Visual Studio (WinForms C#) и имею вопрос.

Мне нужен пользователь моего Пользовательского элемента управления, чтобы смочь изменить определенные строковые значения, и я хотел бы, чтобы они смогли добавить пользовательский элемент управления к своей Форме и нажать на него для перевода в рабочее состояние Области Свойств, где пользовательские свойства моего Пользовательского элемента управления будут отображены.

Как у меня могут быть свои собственные свойства для моего пользовательского элемента управления? Например:

Мой пользовательский элемент управления содержит TextBox, и я хотел бы, чтобы пользователь смог изменить значение того, что TextBox через свойство назвал "текст" или "Значение" в свойствах во Время проектирования.

69
задан JYelton 23 October 2014 в 18:35
поделиться

3 ответа

Как вы сейчас упомянули кастинг... в этом случае есть отличие:

byte a = 5;
a += 10; // Valid
a = a + 10; // Invalid, as the expression "a + 10" is of type int

Из спецификации языка Java раздел 15,26,2 :

Составное выражение назначения формы E1 op = E2 эквивалентно E1 = (T) ((E1) op (E2)) , где T - тип E1 , за исключением того, что E1 оценивается только один раз.

Интересно, что приведенный ими пример в спецификации

short x = 3;
x += 4.6;

действителен в Java, но не в C #... в основном в C # компилятор выполняет специальный корпус из + = и - =, чтобы гарантировать, что выражение либо относится к целевому типу, либо является литералом в пределах диапазона целевого типа.

-121--1478840-

Спасибо Игорю

Я устанавливаю текущую страницу, а затем в транзакции после рендеринга новой таблицы и до установки отката new_page переменной. Затем я могу откатить и проверить, если новая страница var > текущая страница var и если это новая страница и распечатать таблицу. См. код ниже.

Проблема теперь в том, что pdf.start_new_page говорит об ошибке, но если я просто возьму строку pdf.rollback, она работает. См. сообщение об ошибке ниже.

Любые идеи любой один или любой более простой дорожный, должен быть один!!

спасибо rick

@current_page = pdf.page_count

pdf.transaction do 
  pdf.move_down 20

  pdf.table @data,
    :font_size  => 12, 
    :border_style => :grid,
    :horizontal_padding => 10,
    :vertical_padding   => 3,
    :border_width       => 2,
    :position           => :left,
    :row_colors => ["FFFFFF","DDDDDD"]

  @the_next_page = pdf.page_count
  pdf.rollback

end 

if @the_next_page > @current_page

  pdf.start_new_page

  pdf.table @data,
    :font_size  => 12, 
    :border_style => :grid,
    :horizontal_padding => 10,
    :vertical_padding   => 3,
    :border_width       => 2,
    :position           => :left,
    :row_colors => ["FFFFFF","DDDDDD"]
end 

Ошибка

> You have a nil object when you didn't expect it!
The error occurred while evaluating nil.identifier

Extracted source (around line #158): 

155: end



RAILS_ROOT: C:/InstantRails/rails_apps/Macrotec-Application

Application Trace | Framework Trace | Full Trace 
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document.rb:302:in `go_to_page'
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document/internals.rb:128:in `finalize_all_page_contents'
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document/internals.rb:127:in `each'
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document/internals.rb:127:in `finalize_all_page_contents'
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document.rb:344:in `render'
C:/InstantRails/rails_apps/Macrotec-Application/app/views/quotations/show.pdf.prawn:158:in `_run_prawn_app47views47quotations47show46pdf46prawn'
-121--4746515-

Это можно сделать с помощью атрибутов свойств, например:

[Description("Test text displayed in the textbox"),Category("Data")] 
public string Text {
  get { return myInnerTextBox.Text; }
  set { myInnerTextBox.Text = value; }
}

Категория - это заголовок, под которым свойство появится в поле свойств Visual Studio. Ниже приведен более полный справочник MSDN , включающий список категорий.

103
ответ дан 24 November 2019 в 13:45
поделиться

Все очень просто, просто добавьте свойство:

public string Value {
  get { return textBox1.Text; }
  set { textBox1.Text = value; }
}

Использование свойства Text немного сложнее, класс UserControl намеренно скрывает его. Нужно переопределить атрибуты, чтобы вернуть его в рабочее состояние:

[Browsable(true), EditorBrowsable(EditorBrowsableState.Always), Bindable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public override string Text {
  get { return textBox1.Text; }
  set { textBox1.Text = value; }
}
44
ответ дан 24 November 2019 в 13:45
поделиться

Просто добавьте публичные свойства в управление пользователя.

Вы можете добавить атрибуты [Category("MyCategory")][Description("Свойство, управляющее именем wossname")], чтобы сделать его более приятным, но пока это свойство public, оно должно отображаться в панели свойств.

6
ответ дан 24 November 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: