Есть ли способ написать свойство C# one для нескольких элементов. например У меня 5 кнопок, я не хочу писать button1.text = "etc"
, button2.text = "etc
, я хочу написать button.text="etc"
и иметь button1.text через button5.text, чтобы иметь текст «и т. д.».Одно свойство для нескольких кнопок
ответ
Возможно, вы ищете контрольные массивы: http://msdn.microsoft.com/en-us/library/aa289500(v=vs.71).aspx?
Вам придется перебирать эту коллекцию, но в противном случае это сработает. – BradleyDotNET
Вы не можете назначить все 5 кнопок одинаковой ссылки, так что будет работать button.text = "etc"
.
Однако вы можете связать кнопки с тем же свойством:
<Button Content="{Binding myText}"/>
<Button Content="{Binding myText}"/>
<Button Content="{Binding myText}"/>
<Button Content="{Binding myText}"/>
Если привязка правильно установлен с INotifyPropertyChanged
, то все будет обновляться при myText
обновляется.
Вы также можете поместить элементы управления в коллекцию и пропустить их, чтобы установить их свойство Content
, как и другие.
+1 Не думал об использовании привязок. –
Я думаю, что это возможно с чем-то подобным к:
public void SetButtonText(string value) {
this.Controls.OfType<Button>().ToList().ForEach(b => b.Text = value);
}
Или же через свойство:
public string ButtonText {
set {
Controls
.OfType<Button>()
.ToList()
.ForEach(b => b.Text = value);
}
}
EDIT
После дальнейших исследований, я выяснил, что нет прямого доступа к элементам управления страницей на Windows Phone, как я знаю. Так что все зависит от того, хотите ли вы спуститься с PhoneApplicationPage:
Как я вижу, ваше решение вращается вокруг Page.LogicalChildren Property.
public class MyPage : Page {
public string ButtonText {
set {
LogicalChildren
.OfType<Button>()
.ToList()
.ForEach(b => b.Text = value);
}
}
}
Поскольку LogicalChildren
имеет защищённый аксессор, вам нужно получить к нему доступ через производный класс, который должен быть удобным для любого вида страницы, вы работаете на Windows Phone, я думаю.
Или оставьте Grid прямо на PhoneApplicationPage
, а затем опустите на него другие элементы управления, такие как ваши кнопки, затем вы получите к ним доступ через свойство Grid.Children.
Так что, уронили Grid
и назвав его myBaseGrid
, можно было бы сделать следующее:
public void SetButtonsText(string text) {
myBaseGrid.Children
.OfType<Button>()
.ToList()
.ForEach(b => b.Text = "myText");
}
Я бы лично пойти с методом, имя которого становится ясно, что вы делаете по буквам слово Button
во множественном числе, как в моем образце.
+1 для «одной линии». Это может быть «Дети», а не «Элементы управления», поскольку его на телефоне 8, хотя – BradleyDotNET
@BradleyDotNET: см. Мое редактирование. –
Спасибо за информацию! Я удивлен, что они избавились от коллекции «Дети» и заменили ее на «LogicalChildren». В любом случае, все же подход, который я использовал бы, если привязка не была вариантом по какой-то причине. – BradleyDotNET
Одним из способов было бы создать метод, который устанавливает их все для вас, что вы должны вручную написать один раз:
public void SetAllButtonTexts(string text)
{
button1.text = text;
button2.text = text;
// . . .
}
В качестве альтернативы можно использовать цикл:
public void SetAllButtonTexts(string btnText)
{
foreach (var control in this.Controls.OfType<Button>())
{
(control).Text = btnText;
}
}
И если вы не хотите обновлять ВСЕ кнопки, одна простая, но не очень элегантная вещь, которую вы можете сделать, это изменить свойство Tag
кнопок, которые вы хотите изменить с помощью специального текста, и только обновлять их:
public void SetAllButtonTexts(string btnText, string tagText = "")
{
foreach (var control in this.Controls.OfType<Button>()
.Where(b => string.IsNullOrEmpty(tagText)
|| (b.Tag != null && b.Tag.Equals(tagText))))
{
(control).Text = btnText;
}
}
+1 В отличие от моего ответа, кроме синтаксиса 'foreach loop'. Он будет работать. –
Истинный ...Я не видел вашего ответа до того, как отправил сообщение. Великие умы ...: p –
Хехеэ ... Я знаю, что иногда есть несколько параллелизма по ответам. Вы, вероятно, писали свои, когда я разместил свой. ;) Великие умы, тем не менее! = Р –
В нескольких словах: Группируйте все свои кнопки, которые должны быть изменены в списке. Затем перейдите через этот список и установите текст всех кнопок.
Вот несколько кодов.
Прежде всего:
public static List<Button> buttonList = new List<Button>{};
На Form_Load:
buttonList.AddRange(new List<Button>{ button1,button2,button3,...}); // Group your buttons
Теперь это зависит от 'когда' или 'где' вы хотите, чтобы изменить его. Если кнопки нужно изменить в начале, введите следующий код в form_load-событие. Еще раз, когда он должен быть запущен на событие, поместите его в событие.
foreach(Button btn in buttonList)
{
btn.Text = "Change all button-texts from list at one time.";
}
Вы также можете обрабатывать несколько таблиц или ящиков и т. Д., Как это. Просто объявите правильный тип данных.
Приветствия
- 1. Свойство зависимости для кнопок
- 2. Одно поле, несколько кнопок
- 3. Tkinter - одно и то же событие для нескольких кнопок
- 4. Таргетирование нескольких идентификаторов на одно свойство css
- 5. Как установить свойство кнопки для нескольких кнопок с помощью foreach?
- 6. Слот для нескольких кнопок
- 7. FontColor-Свойство для отключенных кнопок?
- 8. Как обновить одно свойство для нескольких объектов NDB?
- 9. одно действие с использованием нескольких кнопок в android
- 10. Добавление нескольких прослушивателей кликов для нескольких кнопок
- 11. Одна функция для нескольких кнопок в matlab
- 12. ActionListener для нескольких кнопок-Swing
- 13. Функция JQuery для нескольких кнопок
- 14. Дизайн шаблона для нескольких кнопок
- 15. Установка нескольких кнопок для отключения
- 16. Реализовать OnTouchListener для нескольких кнопок
- 17. Камера доступа для нескольких кнопок
- 18. jquery toggle для нескольких кнопок
- 19. Функции записи для нескольких кнопок
- 20. Один метод для нескольких кнопок?
- 21. setonlongclicklistener для нескольких кнопок одновременно
- 22. Один OnClickHandler для нескольких кнопок
- 23. Один скрипт для нескольких кнопок
- 24. WPF Анимация нескольких кнопок
- 25. Использование цикла для нескольких кнопок в Protractor
- 26. Одно соединение для нескольких объектов
- 27. Сериализаторы каркаса Django REST: отображение нескольких полей в одно свойство
- 28. javascript: Как печатать значения из нескольких кнопок в одно текстовое поле (одно значение после другого)?
- 29. Ajax действия для нескольких кнопок отправки
- 30. Silverlight - проверять одно свойство
Вы можете создать массив. – SLaks
Если ответ правильный и решает вашу проблему, принимайте выбранный вами ответ, чтобы другие члены сообщества, у которых будет тот же вопрос, узнали, что сработало для вас. –