保存常用方法?

时间:2012-05-06 11:00:09

标签: c# winforms

我有很多方法可以返回我在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)

现在,我不想在每种形式中复制它们,而是想在其他文件中编写它们,并且仍然能够以我添加的任何新形式调用它们。建议?

5 个答案:

答案 0 :(得分:1)

好的,其他人也为此拍摄了我也可能。 我认为这个答案已被提出,但可能没有得到足够的解释。

为您的项目添加一个新类 在Visual C#中你会去的     项目 - >添加类

为您的班级命名,然后点击添加

通常我将此类命名为Tools

然后在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);

我没有编译或测试它无论如何,可能有一个错字,请让我知道是否有明显的东西,所以我可以编辑错误

答案 1 :(得分: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, ...)

使用它们

但是,我实际上质疑这些功能的使用......他们实际上做了什么?我想,创建新的ButtonPictureBox es,但目的是什么?

答案 2 :(得分: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);
}

答案 3 :(得分:0)

我认为创建一个派生自Form的超类会更好,这样你就可以从中派生出所有其他形式。虽然它可能有点棘手,但它是一个更好的架构解决方案:

  • 创建一个新类,假设为public class CommonForm : Form。不要使用Add new form,而是使用Add new class才能使其成为纯.cs文件

  • 在该课程中实施常用方法

  • 创建新表单时,请转到源代码并手动添加: CommonForm以从这个新类派生它们

答案 4 :(得分: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);
    }
    }

您选择哪一个依赖于您要实施的方法。如果你想改变表格(创建按钮等),我会选择继承。