Что самая простая.NET эквивалентна из контрольного массива VB6?

Я нашел для него еще один ответ. В моем случае в AppDelegate я реализовал 2 метода делегирования

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options

и

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

. Первый - это метод делегата и больше не должен реализовываться, он был заменен на второй метод. Но каким-то образом я все еще использую оба и просто добавляю

return [[GIDSignIn sharedInstance] handleURL:url
                                   sourceApplication:sourceApplication
                                          annotation:annotation];

во второй, а затем как-то снова, он просто обращается к первому методу, а затем больше не переходит к моему приложению.

Поэтому я хочу опубликовать свое дело для кого-то, кто может получить эту ошибку, мне потребовалось слишком много времени, чтобы узнать

9
задан MarkJ 26 March 2009 в 12:35
поделиться

8 ответов

Составьте универсальный список текстовых полей:

var textBoxes = new List<TextBox>();

// Create 10 textboxes in the collection
for (int i = 0; i < 10; i++)
{
    var textBox = new TextBox();
    textBox.Text = "Textbox " + i;
    textBoxes.Add(textBox);
}

// Loop through and set new values on textboxes in collection
for (int i = 0; i < textBoxes.Count; i++)
{
    textBoxes[i].Text = "New value " + i;
    // or like this
    var textBox = textBoxes[i];
    textBox.Text = "New val " + i;
}
5
ответ дан 4 December 2019 в 13:51
поделиться

Библиотека совместимости.NET VisualBasic содержит сильные введенные контрольные массивы. Это что использование мастера обновления заменить текущие контрольные массивы VB6.

Однако контрольный массив в VB6 является просто набором объектов с VB6, делающим некоторое волшебство синтаксиса на поверхности. В мире.NET, путем удаления этого, они вызывают лучшие методы.

В закрытии, с появлением дженериков, нет ничего мешающего Вам использовать

List<YourControl> MyControlArray.
1
ответ дан 4 December 2019 в 13:51
поделиться

То же событие щелчка может обработать нажатия кнопки от нескольких кнопок в .NET. Вы могли затем добавить текстовое поле для нахождения в Свойстве тегов?

Private Sub AllButton_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
  Dim c As Control = CType(sender, Control)
  Dim t As TextBox = FindControl(CType(c.Tag, String))
  If t Is Not Nothing Then
     t.Text = "Clicked"
  End If
End Sub
0
ответ дан 4 December 2019 в 13:51
поделиться

Другая хорошая вещь, которую делает.NET VB, имеет единственный обработчик событий, который обрабатывает несколько средств управления:

Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
        Handles TextBox1.TextChanged, _

        TextBox2.TextChanged, _

        TextBox3.TextChanged

End Sub
4
ответ дан 4 December 2019 в 13:51
поделиться

Сделайте массив из средств управления.

TextBox[] textboxes = new TextBox[] {
    textBox1,
    textBox2,
    textBox3
};
0
ответ дан 4 December 2019 в 13:51
поделиться

Существует два аспекта.

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

Однако конструктор форм.NET не поддерживает контрольные массивы по простой причине: массивы средств управления создаются/расширяются во время выполнения. Если Вы знаете, в каком количестве средств управления Вы нуждаетесь во время компиляции (обоснование идет), затем, Вы даете им различные имена и не помещаете их в массив.

Я знаю, что это не очень полезный код

Это - точно точка. Почему имеет функция, если это бесполезно?

В случае необходимости можно также получить доступ к управлению по имени, приведя к чему-то вроде этого:

Private Sub Command_Click(sender As Object, e As EventArgs) Handles Command1.Click, Command2.Click …
    Dim name As String = DirectCast(sender, Control).Name
    Dim index As Integer = Integer.Parse(name.Substring("Command".Length))
    Controls(String.Format("Text {0}", index)).Text = Timer.Value.ToString()
End Sub
2
ответ дан 4 December 2019 в 13:51
поделиться

Нет никакого реального от 1 до 1 аналога в .NET. Несомненно, можно сделать массивы или списки средств управления определенного типа, но нет ничего, что сделает это для Вас автоматически.

Однако я никогда не видел контрольного массива, который не мог быть пересмотрен в .NET к чему-то лучше. Рассматриваемый вопрос является Вашим примером. В сценарии Вы отправили, Вы используете контрольные массивы для разделения на пары кнопки с текстовым полем. В .NET Вы, вероятно, сделали бы это с пользовательским элементом управления. Пользовательский элемент управления состоял бы из кнопки, текстового поля и возможно общего/статичного таймера. Форма использует несколько экземпляров этого пользовательского элемента управления. Вы реализуете логику, необходимую для управления однажды, и это изолируется к своему собственному исходному файлу, который может быть прослежен и отредактирован в управлении исходным кодом, не требуя слияния с большим классом формы или легко снова использован на нескольких формах или даже в нескольких проектах. Вы также не должны волноваться о проверке, что индекс кнопки совпадает с индексом текстового поля.

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

3
ответ дан 4 December 2019 в 13:51
поделиться

Две основные преимущества контрольных массивов в VB6 были: (1) Они предоставили способ для вас, чтобы перебраться с коллекцией контроля (2) Они позволили вам поделиться событиями между элементами управления

(1) могут быть достигнуты в .NET, используя массив элементов управления (2) может быть достигнут, имея одно событие, обрабатывающую несколько элементов управления (синтаксис немного отличается, потому что вы используете аргумент Sender вместо Myarray (индекс) ).

Одна приятная вещь о .NET состоит в том, что эти функции развязаны. Таким образом, например, вы можете иметь элементы управления, которые обмениваются событиями, даже если они не являются частью массива и имеют разные имена и даже другой тип. И вы можете перейти через коллекцию контроля, даже если у них совершенно разные события.

0
ответ дан 4 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

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