0

最初の形式でオブジェクトを作成して辞書に追加しています。1stフォームで作成したオブジェクトに合わせてパネルにサインを描きたいので、2ndフォームで検索したい。

このトピックを見まし たが、フォームを引数として受け取るコンストラクターを Form2 に追加する方法がわかりません。

シングルトン ディクショナリを作成しようとしていましたが、foreach ループでディクショナリから値を取得する方法もわかりません。

すべてがこの同じ形式になる場合、luskanie.value.rodzaj でこれを作成する必要があります。2 つの形式がある場合、これは機能しません。

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

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 に答える