Привязка перечисления к полю комбинированного списка WinForms и затем установка его

Класс Arrays имеет версии sort() и binarySearch(), для которых не требуется Comparator.. Например, вы можете использовать версию Arrays.sort(), которая просто принимает массив объектов . Эти методы вызывают метод compareTo() объектов в массиве.

112
задан 25 May 2009 в 14:19
поделиться

7 ответов

В настоящий момент я использую свойство Items, а не DataSource, это означает, что мне нужно вызывать Add для каждого значения перечисления, но это небольшое перечисление и его временный код в любом случае.

Тогда я могу просто применить Convert.ToInt32 к значению и установить его с помощью SelectedIndex.

Временное решение, но пока YAGNI.

Приветствую вас идеи, я, вероятно, воспользуюсь ими, когда сделаю правильную версию после получение отзывов клиентов.

0
ответ дан 24 November 2019 в 02:49
поделиться

Вы можете использовать список значений KeyValuePair в качестве источника данных для поля со списком. Вам понадобится вспомогательный метод, в котором вы можете указать тип перечисления, и он возвращает IEnumerable>, где int - это значение перечисления, а строка - это имя значения перечисления. В поле со списком установите для свойства DisplayMember значение «Key», а для свойства ValueMember - значение «Value». Value и Key - это общедоступные свойства структуры KeyValuePair. Затем, когда вы устанавливаете для свойства SelectedItem значение перечисления, как вы это делаете, оно должно работать.

0
ответ дан 24 November 2019 в 02:49
поделиться

Если вам нужно проверить внешние страницы, вы не сможете обойтись без решения на чистом javascript, поскольку любые запросы к внешним URL-адресам блокируются. Вы можете обойтись без этого, используя JSONP, но это не сработает, если запрашиваемая страница не обслуживает только JSON.

У вас должен быть прокси на вашем собственном сервере, чтобы получать внешние ссылки для вас. На самом деле это довольно просто с любым серверным языком.

<?php
$contents = file_get_contents($_GET['url']); // please do some sanitation here...
                                             // i'm just showing an example.
echo $contents;
?>

Если вам нужно было проверить коды ответа сервера (например: 404, 301 и т. Д.), То использование библиотеки, такой как cURL, в вашем серверном скрипте может получить эту информацию а затем передайте его в ваше приложение javascript.

Если подумать, возможно, существуют прокси-серверы с поддержкой JSONP, которые вы могли бы использовать, если вариант «настроить мой собственный прокси» окажется неприменимым.

0
ответ дан 24 November 2019 в 02:49
поделиться

Вы можете использовать функции «FindString ..»:

Public Class Form1
    Public Enum Test
        pete
        jack
        fran
        bill
    End Enum
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ComboBox1.DataSource = [Enum].GetValues(GetType(Test))
        ComboBox1.SelectedIndex = ComboBox1.FindStringExact("jack")
        ComboBox1.SelectedIndex = ComboBox1.FindStringExact(Test.jack.ToString())
        ComboBox1.SelectedIndex = ComboBox1.FindStringExact([Enum].GetName(GetType(Test), Test.jack))
        ComboBox1.SelectedItem = Test.bill
    End Sub
End Class
0
ответ дан 24 November 2019 в 02:49
поделиться

Я использую следующий вспомогательный метод, который вы можете привязать к своему списку.

    ''' <summary>
    ''' Returns enumeration as a sortable list.
    ''' </summary>
    ''' <param name="t">GetType(some enumeration)</param>
    Public Shared Function GetEnumAsList(ByVal t As Type) As SortedList(Of String, Integer)

        If Not t.IsEnum Then
            Throw New ArgumentException("Type is not an enumeration.")
        End If

        Dim items As New SortedList(Of String, Integer)
        Dim enumValues As Integer() = [Enum].GetValues(t)
        Dim enumNames As String() = [Enum].GetNames(t)

        For i As Integer = 0 To enumValues.GetUpperBound(0)
            items.Add(enumNames(i), enumValues(i))
        Next

        Return items

    End Function
1
ответ дан 24 November 2019 в 02:49
поделиться

Код

comboBox1.SelectedItem = MyEnum.Something;

в порядке, проблема должна находиться в DataBinding. Назначения DataBinding происходят после конструктора, в основном при первом отображении поля со списком. Попробуйте установить значение в событии Load. Например, добавьте этот код:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    comboBox1.SelectedItem = MyEnum.Something;
}

И проверьте, работает ли он.

15
ответ дан 24 November 2019 в 02:49
поделиться

Попробуйте:

comboBox1.SelectedItem = MyEnum.Something;

РЕДАКТИРОВАТЬ:

Ой, вы уже пробовали это. Однако у меня это сработало, когда мой comboBox был настроен на DropDownList.

Вот мой полный код, который у меня работает (как с DropDown, так и с DropDownList):

public partial class Form1 : Form
{
    public enum BlahEnum
    { 
        Red,
        Green,
        Blue,
        Purple
    }

    public Form1()
    {
        InitializeComponent();

        comboBox1.DataSource = Enum.GetValues(typeof(BlahEnum));

    }

    private void button1_Click(object sender, EventArgs e)
    {
        comboBox1.SelectedItem = BlahEnum.Blue;
    }
}
12
ответ дан 24 November 2019 в 02:49
поделиться
Другие вопросы по тегам:

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