Класс Arrays
имеет версии sort()
и binarySearch()
, для которых не требуется Comparator.
. Например, вы можете использовать версию Arrays.sort()
, которая просто принимает массив объектов . Эти методы вызывают метод compareTo()
объектов в массиве.
В настоящий момент я использую свойство Items, а не DataSource, это означает, что мне нужно вызывать Add для каждого значения перечисления, но это небольшое перечисление и его временный код в любом случае.
Тогда я могу просто применить Convert.ToInt32 к значению и установить его с помощью SelectedIndex.
Временное решение, но пока YAGNI.
Приветствую вас идеи, я, вероятно, воспользуюсь ими, когда сделаю правильную версию после получение отзывов клиентов.
Вы можете использовать список значений KeyValuePair в качестве источника данных для поля со списком. Вам понадобится вспомогательный метод, в котором вы можете указать тип перечисления, и он возвращает IEnumerable>, где int - это значение перечисления, а строка - это имя значения перечисления. В поле со списком установите для свойства DisplayMember значение «Key», а для свойства ValueMember - значение «Value». Value и Key - это общедоступные свойства структуры KeyValuePair. Затем, когда вы устанавливаете для свойства SelectedItem значение перечисления, как вы это делаете, оно должно работать.
Если вам нужно проверить внешние страницы, вы не сможете обойтись без решения на чистом 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, которые вы могли бы использовать, если вариант «настроить мой собственный прокси» окажется неприменимым.
Вы можете использовать функции «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
Я использую следующий вспомогательный метод, который вы можете привязать к своему списку.
''' <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
Код
comboBox1.SelectedItem = MyEnum.Something;
в порядке, проблема должна находиться в DataBinding. Назначения DataBinding происходят после конструктора, в основном при первом отображении поля со списком. Попробуйте установить значение в событии Load. Например, добавьте этот код:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
comboBox1.SelectedItem = MyEnum.Something;
}
И проверьте, работает ли он.
Попробуйте:
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;
}
}