2个表格之间的连接

时间:2013-05-01 15:10:53

标签: c# winforms dictionary

我正在以第一种形式创建和添加对象到字典。 我想以第二种形式搜索它,因为我想根据第一种形式创建的对象在面板上绘制符号。

我看到了这个 topic但我不知道,我如何向Form2添加构造函数,将Form作为参数?

我试图制作单例字典,但我也不知道如何从foreach循环中的字典中获取值。

当每个人都采用相同的形式时,我应该通过以下方式制作:luskanie.value.rodzaj,如果我有两种形式,那么它不起作用。

form1字典中的代码:

     public partial class Form1 : Form
    {

        public static Dictionary<int, baza> naszalista = new Dictionary<int, baza>(); 


This is second form:


    namespace _1dwa3
    {
        public partial class diagram : Form
        {

        public diagram()
        {
            InitializeComponent();
        }

        private void diagram_Load(object sender, EventArgs e)
        {

        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            SolidBrush laczniki = new SolidBrush(Color.Gray);
            Pen lacznikipen = new Pen(Color.Gray, 5);
            SolidBrush funkcja = new SolidBrush(Color.Green);
            Pen funkcjapen = new Pen(Color.Green, 5);
            SolidBrush zdarzenie = new SolidBrush(Color.Red);
            Pen zdarzeniepen = new Pen(Color.Red, 5);
            SolidBrush strzalka = new SolidBrush(Color.Black);
            Graphics rysujem = panel1.CreateGraphics();


            foreach (KeyValuePair<int, baza> luskanie in Form1.naszalista)
            {

                if (baza.rodzaj == "funkcja")
                {
                    rysujem.FillEllipse(funkcja,20,20,40,20);
                    rysujem.DrawString(funkcjazdarzenie.opis, new Font("Segoe", 9), Brushes.Green, 20, 20);
                }
                else if (baza.rodzaj == "zdarzenie")
                {
                    rysujem.FillPie(zdarzenie,20,20,20,20,20,20);
                }
                else if (baza.rodzaj == "XOR")
                {

                }
                else if (baza.rodzaj == "OR")
                {

                }
                else if (baza.rodzaj == "AND")
                {

                }
            }
        }
    }
}

对于任何建议,我试图让这个问题具体化。

我在这里添加,还有简短描述的课程

public class baza    /* this is superior class, it contains rodzaj = which give me opportunity, to know which shape shold be printed, idpoprzedniego give me chance to know after which shape it should be printed */
{
  public  string rodzaj;
  public  int idpoprzedniego;

}

现在是从baza继承的类,它有一个构造函数并且有一个新的字符串opis =,其中包含描述action的文本。例如“老板需要签署文件”

public class funkcjazdarzenie : baza //          
{
  public string opis;
  public funkcjazdarzenie(string krodzaj, string kopis, int kidpoprzedniego)
    {
        rodzaj = krodzaj;
        idpoprzedniego = kidpoprzedniego;
        opis = kopis;
    }

}

Xor / Or /并且在插图上有相同的符号它将是圆形,但它们之间的差异将在形状中间的文本中,就像类的名称一样xor /或/和

public class xor : baza //klasa odpowiedzialna za xora 
{
    public xor(string krodzaj,int kidpoprzedniego)
    {
        rodzaj = krodzaj;
        idpoprzedniego = kidpoprzedniego;
    }


}

public class or : baza //klasa odpowiedzialna za ora 
{
    public or(string krodzaj,int kidpoprzedniego)
    {
        rodzaj = krodzaj;
        idpoprzedniego = kidpoprzedniego;
    }

}

public class and : baza // klasa odpowiedzialna za and 
{
    public and(string krodzaj,int kidpoprzedniego)
    {
        rodzaj = krodzaj;
        idpoprzedniego = kidpoprzedniego;
    }
}

2 个答案:

答案 0 :(得分:0)

要在两个表单之间发送值,您可以

  1. 在第二个表单的构造函数中发送值。您可以创建一个参数化构造函数,并在初始化表单时发送值。
  2. 您可以在第二个表格中参考您的第一个表格:
  3. 第二种形式,

    public Form1 objForm1;
    

    并以First Form形式,

    Form2 objForm2=new Form2();
    Form2.objForm1=this;
    

    然后你可以使用Form2的objForm1来引用Form1的字典项

    //Form1.Dict_Name=values;
    

答案 1 :(得分:0)

您已将Form1中的Dictionary设置为静态,并且正在从Form2正确访问它。问题出在你的For循环中。 “luskanie”变量代表KeyValuePair,因此您应该使用它来访问“rodzaj”成员。

所以而不是:

if (baza.rodzaj == "funkcja")

你应该:

if (luskanie.Value.rodzaj == "funkcja")

总之,你可以看起来像:

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
        SolidBrush laczniki = new SolidBrush(Color.Gray);
        Pen lacznikipen = new Pen(Color.Gray, 5);
        SolidBrush funkcja = new SolidBrush(Color.Green);
        Pen funkcjapen = new Pen(Color.Green, 5);
        SolidBrush zdarzenie = new SolidBrush(Color.Red);
        Pen zdarzeniepen = new Pen(Color.Red, 5);
        SolidBrush strzalka = new SolidBrush(Color.Black);
        Graphics rysujem = panel1.CreateGraphics();


        foreach (KeyValuePair<int, baza> luskanie in Form1.naszalista)
        {
            baza bz = luskanie.Value;

            if (bz.rodzaj == "funkcja")
            {
                rysujem.FillEllipse(funkcja, 20, 20, 40, 20);
                rysujem.DrawString(funkcjazdarzenie.nazwa, new Font("Segoe", 9), Brushes.Green, 20, 20);
            }
            else if (bz.rodzaj == "zdarzenie")
            {
                rysujem.FillPie(zdarzenie, 20, 20, 20, 20, 20, 20);
            }
            else if (bz.rodzaj == "XOR")
            {

            }
            else if (bz.rodzaj == "OR")
            {

            }
            else if (bz.rodzaj == "AND")
            {

            }
        }
    }