2013-03-28 2 views
0

У меня есть метод в VB.Net, который вызывает кнопку формы:использование объекта в C# .NET, как vb.net

Private Sub BUTTON_CAL(_ 
    ByVal frm As Object, ByVal e As System.Windows.Forms.KeyEventArgs) 

    If e.KeyCode = Keys.A AndAlso e.Modifiers = Keys.Control Then 
     If frm.AddButton.Enabled = True Then Call frm.AddButton.PerformClick() 
     e.SuppressKeyPress = True 
    End if 
End Sub 

Я преобразовал этот код в C#

public static void BUTTON_CAL(object frm, System.Windows.Forms.KeyEventArgs e) { 
    if(e.KeyCode==Keys.A&&e.Modifiers==Keys.Control) { 
     if(frm.AddButton.Enabled==true) { 
      frm.AddButton.PerformClick(); 
     } 
     e.SuppressKeyPress=true; 
    } 
} 

в C# .Net Я получаю ошибку

«объект» не содержит определения для AddButton»и не метод расширения„AddButton“принимать первый agument типа„объект“может быть найдено (вы пропали без вести с помощью директивы или ссылка на сборку?)

+6

Вам нужно бросить 'frm' ему это фактический тип. Покажите, где вы вызываете этот метод. –

+0

frm is System.Windows.Forms –

+0

@TimSchmelter 'BUTTON_CAL (object frm ...' – gdoron

ответ

5

Cast «КАДР» к типу данных вы ожидаете, что это будет (проверка выполнения, если действует хорошая идея)

Form form = frm as Form; 

if(null == form) 
    // error 

form.AddButton(...); 
+4

Если вы собираетесь выбросить ошибку, если она равна нулю, просто используйте вместо нее - это будет более простой код и даст четкое исключение. Кроме того, нет смысла использовать 'if (null == form)', а не 'if (form == null)' в C#. Это не похоже на опечатку 'if (form = null)' будет компилироваться. –

+0

Да, старые привычки от C++ сильно умирают;) – Moho

+0

System.Windows.Forms не содержит определения для «AddButton» ...Как реализовать ???? –

-2

отливать FRM имя класса вашей формы

if (((Form1)frm).AddButton.Enabled == true){ 
    ((Form1)frm).AddButton.PerformClick(); 
} 

Я полагаю, Form1 это имя вашей формы, и она имеет кнопку с именем AddButton и что кнопка имеет собственный модификатор доступа.

+0

Forms.Form не имеет AddButton поле или свойство. -1 –

0
public static void BUTTON_CAL(object sender, KeyEventArgs e) { 
    if(sender is Form) { 
     var frm=sender as Form; 

     if(e.KeyCode==Keys.A && e.Modifiers==Keys.Control) { 
      if(frm.AddButton.Enabled) 
       frm.AddButton.PerformClick(); 

      e.SuppressKeyPress=true; 
     } 
    } 
} 
  1. Сигнатура KeyEventHandler является

    public delegate void KeyEventHandler(object sender, KeyEventArgs e); 
    
  2. Вместо if(SomeBool) чем if(SomeBool==true). Не будьте излишне сложными.

  3. положить someObject as SomeType в if(someObject is SomeType) будет безопасным. Это кажется немного избыточным, но более читаемым, чем сравнение с нулевым.

-1

Спасибо всем за то, что время, чтобы решить эту проблему я решить эту проблему с помощью ниже:

public static void BUTTON_CAL(object sender, System.Windows.Forms.KeyEventArgs e) 
{ 
    var frm = sender as Form; 

    if(e.KeyCode==Keys.A&&e.Modifiers==Keys.Control) 
    { 
      if(frm.Controls["AddButton"].Enabled==true) 
      { 
      ((Button)frm.Controls["AddButton"]).PerformClick(); 
      } 
      e.SuppressKeyPress=true; 
    } 
} 
+0

Вы действительно должны принять один из предложенных ответов, вместо того, чтобы писать свой (избыточный). – Teejay

Смежные вопросы