2012-05-06 2 views
0

У меня есть множество методов, возвращающих пустоты, которые я написал для своей программы в формах C#, которые я использую все время. Поскольку мне нужно использовать их в нескольких формах, я считаю, что должен быть лучший способ сохранить их в некоторых классах, а затем скопировать их для каждой формы отдельно ... Я совершенно новый, поэтому я ищу совет. Что делать?Сохранение общих методов?

Пример: Я создал методы, подобные этим:

private void NewBtn(string nName, int locX, int locY) 
private void NewPic(string nName, int locX, int locY, int SizX, int SizY, Image Img) 

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

+4

Вы можете создать статический класс и определить ваш функции там. Но я не уверен, что это лучший образец. Что делают эти функции * *? –

+7

Боковое примечание: я никогда не слышал методов, возвращающих 'void', называемых« пустотами ». – svick

+0

Я совершенно новый в этом, как уже упоминалось (я думаю). Эти функции просто создают графические ящики с определенным изображением, размером и местоположением. –

ответ

1

Хорошо, все остальные сделали это, я тоже мог. Я думаю, что этот ответ был предложен, но, возможно, недостаточно объяснен.

добавить новый класс в проект в Visual C# вы бы Project -> добавить класс

Дайте ваш класс имя и нажмите ADD

Обычно я называю этот класс Инструменты

затем в файле Tools.cs

EDITED: Я смотрел на некоторые из ваших других вопросов, и я думаю, что нашел фактический метод, который вы пытаетесь выполнить ление. Поскольку кто-то прокомментировал эту тему, вам действительно нужно использовать лучшие имена, я внес изменения в метод, чтобы, надеюсь, имитировать то, что вы собираетесь делать. Для тех, кто пытается понять это смотрите C# graphics, paint, picturebox centering

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace MyNameSpace //Make sure this matches your projects namespace 
{ 
    class Tools 
    { 
     //Because this is outside the form that is calling it, you cannot access 
     //the actual form or panel where you wish to place the button(PictureBox) 
     //so instead of returning void (which is nothing) we return the newly 
     //created Button(PictureBox) 



     public static PictureBox NewBtn(string nName, int locX, int locY) 
     { 
      Font btnFont = new Font("Tahoma", 16); 
      PictureBox S = new PictureBox(); 
      //You need to specify a size for your pictureBox 
      S.Width=100; 
      S.Height=100; 

      S.Location = new System.Drawing.Point(locX, locY); 
      S.Paint += new PaintEventHandler((sender, e) => 
      { 
       var size = g.MeasureString(Name, btnFont); 
       e.Graphics.DrawString(Name, btnFont, Brushes.Black, 
        (S.Width - size.Width)/2, 
        (S.Height - size.Height)/2)); 
      } 
      return S; 
     } 
    } 
} 

В настоящее время в одном из ваших форм

Panel1.Controls.Add(Tools.NewBtn("btn1",200,200)); 

или PictureBox MyButton = Tools.NewBtn ("btn1", 200,200);

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

+0

Это на самом деле самое объясненное решение до сих пор, я пытаюсь ответить после –

+0

«Так как Project.Tools.NewBtn (string, int, int) возвращает void, ключевое слово return не должно сопровождаться выражением объекта '-> is что я получаю, когда пытаюсь ввести «return returnbutton»:/ –

+0

@AntonioTehSumtin Как я объяснил в комментариях выше, вам нужно изменить void на Button, потому что вам нужно вернуть кнопку. Посмотрите ближе к вышеуказанному коду, обратите внимание на декларацию public static Button NewBtn. Затем в начале метода вы объявляете новую кнопку, вносите изменения в нее, а затем отправляете ее обратно. Если кнопка должна быть основана на существующем, вы можете отправить кнопку в метод public static Button NewBtn (шаблон кнопки, имя строки, int locX, int locY) –

0

Вы можете сделать их extension methods,

static class FormExtensions { 
    public static void NewBtn(this Form form, string nName, int locX, int locY) { ... } 
} 

так, что они будут отозваны из любого Form, как если бы они были объявлены в самой форме.

Или вы можете добавить их в вспомогательный класс (скажем FormHelpers) и добавить параметр для Form - то есть,

public void NewBtn(Form form, string nName, int locX, int locY) { ... } 

, а затем использовать их в качестве FormHelpers.NewBtn(this, ...).

Однако, я на самом деле сомневаюсь в использовании этих функций ... Что они на самом деле делают? Создайте новые Button s и PictureBox es, я полагаю, но с какой целью?

+0

Цель состоит в том, чтобы создать кнопку и просто направить ее координаты, размер и изображение, а затем набрать 5-6 строк кода для каждого из них, так как я использую много разных кнопок ^^ –

0

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

public FormUtilClass 
private void NewBtn(string nName, int locX, int locY, Control parentControl) 

После того, как вы сделаете это, из вашего класса Form, вы делаете это:

public class MyForm : Form 
... 
FormUtilClass formUtil = new FormUtilClass(); 
formUtil.NewBtwn("someName", 0, 0, this); 

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

С другой стороны, вы также можете создать класс, который расширяет Form и содержит следующие методы:

public class MyForm : Form 
private void NewBtn(string nName, int locX, int locY) 
{ 
    Button btn = new Button(); 
    ... 
    this.Controls.Add(btn); 
} 

А потом, когда вы создаете свои собственные формы, вы просто простираться от последнего класса:

public class MyNewForm : MyForm 
{ 
    this.NewButton("someName", 0, 0); 
} 
+0

Я не могу заставить его работать, больше объяснение если хотите? –

+0

@ AntonioTehSumtin: Я отредактировал свой ответ, я не думаю, что я могу быть более ясным, чем это. – npinti

0

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

  • Создайте новый класс, скажем public class CommonForm : Form. Не используйте Add new form, но Add new class, чтобы сделать его чистым.CS-файл

  • Реализовать свои общие методы в этом классе

  • При создании новых форм, перейти к исходному коду и вручную добавить : CommonForm вывести их из этого нового класса

+0

Предложения, как это сделать? ^^ ' –

+0

Добавлены некоторые инструкции –

0

один способ заключается в наследуют от базовой формы:

public partial class BaseForm: Form 
    { 
private void NewBtn(string nName, int locX, int locY) 
{ 
//Your Action 
} 
private void NewPic(string nName, int locX, int locY, int SizX, int SizY, Image Img) 
{ 
//Your Action 
} 
} 

public partial class SecondForm: BaseForm 
    { 
public SecondForm() 
     { 
NewPic(Parameters); 
} 
} 

Второй способ заключается в создании статического класса, который содержит функции:

public static class FunctionClass 
     { 
    private void NewBtn(string nName, int locX, int locY) 
    { 
    //Your Action 
    } 
    private void NewPic(string nName, int locX, int locY, int SizX, int SizY, Image Img) 
    { 
    //Your Action 
    } 
    } 

public partial class SecondForm: Form 
     { 
    public SecondForm() 
      { 
    FunctionClass.NewBtn(Arguments); 
    } 
    } 

Какой из выбранных вами вариантов зависит от метода, который вы хотите реализовать. Если вы хотите изменить форму (создать кнопки и т. Д.), Я бы выбрал наследование.

+0

Итак, вы предлагаете мне сделать несколько форм на одной странице? –

+0

@AntonioTehSumtin Я бы предложил сделать наследование. Таким образом, вы можете наследовать из baseform и использовать эти функции для каждой ne-формы.Если вы измените базовую форму, это изменение произойдет и в других формах. – HW90

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