2013-12-24 4 views
0

Предположим, что у меня есть проект с несколькими различными формами: Form1, Form2, Form3 и у меня также есть класс, называемый CustomTools, который содержит часто используемые процедуры проверки и функции:Использование классов через форм в одном проекте

class CustomTools 
{ 
    bool isNumeric(object input) 
    { 
     double result; 
     if (input == null) 
      return false; 
     else 
     { 
      if (double.TryParse(input.ToString(), out result)) 
       return true; 
      else 
       return false; 
     } 
    } 
} 

Прямо сейчас, когда я пытаюсь использовать isNumeric в одной из моих форм, он не появляется во всплывающем окне IntelliSense. Каков наилучший способ сделать эту функцию доступной во всех моих формах? Большое спасибо за Вашу помощь!

+2

'но ни работал для функций или procedures' - Я не ясно, на чем ты под этим подразумевается. –

+1

Предположим, что вы хотите изучить одноэлементный шаблон или хотите сделать эту функцию общедоступной статической – qwr

+0

Другими словами, я не могу заставить 'CustomTools tools = new CustomTools()' а затем запускать 'CustomTools.customFunction()'. – gnarlybracket

ответ

4

Вы должны добавить public перед своими методами.

Например:

public bool isNumberic(object input) 
{ 
    ... 
} 

И вы можете сделать статические методы:

public static bool isNumberic(object input) 
{ 
    ... 
} 

Так что вы можете называть их просто:

CustomTools.isNumberic(someVariable); 
+0

Я понял, что это было что-то простое, что я пропустил. Большое спасибо! – gnarlybracket

0

Вы можете создать класс типа service/helper со статическими/совместно используемыми методами. Это удобно группирует ваши методы в одном месте и не требует экземпляра. Однако этот подход хорошо работает с методами без сохранения. Вы также можете рассмотреть базовый класс, на который наследуются ваши формы. Этот класс может содержать ваши общие методы. Есть много, приемлемых способов кожи этой кошки.

0

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

public class Form1 : Form 
{ 
    public CustomTools Tools { get; set; } 
} 
public class Form2 : Form 
{ 
    public CustomTools Tools { get; set; } 
} 
public class Form2 : Form 
{ 
    public CustomTools Tools { get; set; } 
} 

и всякий раз, когда вы создаете форму, присвоить ему Tools свойства

var tools = new CustomTools(); 
var f1 = new Form1() { Tools = tools }; 
var f2 = new Form2() { Tools = tools }; 
var f3 = new Form3() { Tools = tools }; 
... 
f1.Show(); 
f2.Show(); 
f3.Show(); 

в каждой форму вы используете инструменты, как

public void inputTextBox_Clicked(object sender, EventArgs e) 
{ 
    var input = (sender as TextBox).Text; 
    if(Tools.IsNumeric(input)) 
    { 
     ... 
    } 
} 

Лучшим решением является использование методов расширения.

0

Вот как реализовать метод расширения, который доступен для всех классов в пространстве имен и ниже:

public class Form1 
{ 

    public void inputTextBox_Changed(object sender, EventArgs e) 
    { 
     object input=(sender as Control).Text; 
     if (sender.IsNumeric()) 
     { 
     } 
    } 
} 

public static class CustomTools 
{ 
    public static bool IsNumeric(this object item) 
    { 
     if (item==null) return false; 
     double result; 
     return double.TryParse(item.ToString(), out result); 
    } 
} 
Смежные вопросы