0

我正在以第一种形式创建对象并将其添加到字典中。我想以第二种形式搜索它,因为我想根据在第一种形式中创建的对象在面板上绘制标志。

我看到了这个 主题,但我不知道,我必须如何向 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 = 包含描述动作的文本。例如“老板需要签署文件”

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

}

Xor/Or/and 在插图上具有相同的符号,它将是圆形,但它们之间的区别将在形状中间的文本中,就像类的名称一样,它将是 xor/or/and

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;
    }
}
4

2 回答 2

0

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

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

在第二种形式中,

public Form1 objForm1;

在第一形式中,

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

然后您可以使用 Form2 的 objForm1 将 Form1 的字典项称为

//Form1.Dict_Name=values;
于 2013-05-01T15:17:20.393 回答
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")
            {

            }
        }
    }
于 2013-05-01T15:31:26.997 回答