» »

C# začetniško vprašanje - klicanje metode

C# začetniško vprašanje - klicanje metode

Poldek1 ::

Pozdravljeni

Žal ne najdem rešitve za en zelo osnovni problem pri programiranju v C#.
Imam glavni program ter dva okna (windows form). V glavnem programu kličem Form2. Z gumbom iz Form2 kličem Form1. Sedaj pa želim z gumbom iz Form1 poklicati metodo PS() iz glavnega programa.
Če to poskušam narediti tako:
SolidWorksMacro sw = new SolidWorksMacro();
sw.PS();

potem dobim error: No overload for method 'SolidWorksMacro' takes '0' arguments
Nimam pa ideje kaj bi lahko dal za arguments.

Glavni program:
namespace Example.csproj
{
    public partial class SolidWorksMacro
    {

        public Form1 RWindow = new Form1();
        public Form2 BWindow = new Form2();



        public void Main()
        {
            BWindow.ShowDialog();
            
        }

        public void PS() 
        {
            MessageBox.Show("WORKING");
        }

        /// <summary>
        ///  The SldWorks swApp variable is pre-assigned for you.
        /// </summary>
        public SldWorks swApp;
    }
}




Form2:

namespace Example.csproj
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form1 frm = new Form1();
            frm.Show();
            this.Close();
            
        }
    }
}



Form1:
namespace Example.csproj
{
    public partial class Form1 : Form
    {
              

        public Form1()
        {
            InitializeComponent();
        }
        
        private void button1_Click(object sender, EventArgs e)
        {

            //SolidWorksMacro sw = new SolidWorksMacro();
            //sw.PS();
            //Če poskušam metodo PS klicati tako dobim error:     No overload for method 'SolidWorksMacro' takes '0' arguments	C:\Users\Desktop\MACRO-JI\C#\Example_mod\SwMacro\Form1.cs	24	34	Example

            this.Close();
        }
    }
}



Prosim za pomoč
  • spremenilo: Poldek1 ()

klemen93 ::

V konstruktor za Form1 dodaj SolidWorksMacro objekt kot parameter.

Frajtonar ::

Kako pa to naredim.

Sem poskusil tako:

namespace Example.csproj
{
    public partial class Form1 : Form
    {
              

        public Form1(SolidWorksMacro)
        {
            
            InitializeComponent();
        }
        
        private void button1_Click(object sender, EventArgs e)
        {

            SolidWorksMacro sw = new SolidWorksMacro();
            sw.PS();
            this.Close();
        }
    }
}



Samo potem dobim error: Error 1 Identifier expected

klemen93 ::

Glavni program:

namespace Example.csproj
{
    public partial class SolidWorksMacro
    {
 
        public Form1 RWindow = new Form1(sw);
        public Form2 BWindow = new Form2(sw);
 
 
 
        public void Main()
        {
            BWindow.ShowDialog();
             
        }
 
        public void PS() 
        {
            MessageBox.Show("WORKING");
        }
 
        /// <summary>
        ///  The SldWorks swApp variable is pre-assigned for you.
        /// </summary>
        public SldWorks swApp;
    }
}


Form2:

namespace Example.csproj
{
    public partial class Form2 : Form
    {
        public Form2(SolidWorksMacro sw)
        {
            InitializeComponent();
            this.sw = sw;
        }
        SolidWorksMacro sw;
        private void button1_Click(object sender, EventArgs e)
        {
            Form1 frm = new Form1(sw);
            frm.Show();
            this.Close();
             
        }
    }
}


Form1:

namespace Example.csproj
{
    public partial class Form1 : Form
    {
               
 
        public Form1(SolidWorksMacro sw)
        {
            InitializeComponent();
            this.sw = sw;
        }

        SolidWorksMacro sw;
         
        private void button1_Click(object sender, EventArgs e)
        {
            sw.PS();
            this.Close();
        }
    }
}

Zgodovina sprememb…

  • spremenil: klemen93 ()

Frajtonar ::

Zdej pa dobim te dve napaki:

Error 1 The name 'sw' does not exist in the current context C:\Users\Desktop\MACRO-JI\C#\Example_mod\SwMacro\SolidWorksMacro.cs 13 42 Example
Error 2 The name 'sw' does not exist in the current context C:\Users\Desktop\MACRO-JI\C#\Example_mod\SwMacro\SolidWorksMacro.cs 14 42 Example

darkolord ::

Nečesa nisi prav skopiral.

klemen93 ::

V glavnem programu moraš nekje deklerirat SolidWorksMacro sw, tega ti nisem dodal ker ne vem kaj sprejema kot parameter.

Frajtonar ::

Najprej hvala za pomoč, ki si mi jo dal do sedaj. Upam, da bom čim preje rešil ta problem.

Vendar sem sedaj še bolj zmeden kaj moram narediti.
SolidWorksMacro je samo ime razreda.
Kako pa naj vem kaj sprejema kot parameter.

darkkk ::

Tko na približno (ker ne vem kaj ta solidworks dela, ampak vseeno):

class Form1:Form{
   private SolidWorks sw;
   Form1(SolidWorks sw){
      InitializeComponents();
      this.sw = sw;              //referenco na SW v Form1
   }
   private button1_Click(...){
      this.sw.PS();            //klices metodo PS() na lastni spremenljivki forme1
   }
}

class Form2:Form
{
    Form2(){InitializeComponenets();}
    private btnForm2_Click(...){
       Form1 f = new Form1(sw); //od kje ta sw prileti nimam pojma!!!
       f.Show()  //se boljse f.ShowDialog(), verjetno;
    }
    
}




Torej narediš form2, in ko na formi2 klikneš gumb btnForm2 se ti zgenerira nov objekt tipa forma1, ki dobi noter referenco na solidworkov neki in ima gumb. Ko na formi1 stisneš gumb se ti izvede metoda button1_Click, ki kliče ugibam solidworksov parsescript :P

(ps. konceptualno verjetno hočeš zamenjat vlogi forme1 in 2 ampak ne bom ugibal)

Frajtonar ::

namespace Example.csproj
{
    public partial class SolidWorksMacro
    {

        public Form1 RWindow = new Form1(sw);
        public Form2 BWindow = new Form2();
        


        public void Main()
        {
            BWindow.ShowDialog();

        }

        public void PS()
        {
            MessageBox.Show("WORKING");
        }

        /// <summary>
        ///  The SldWorks swApp variable is pre-assigned for you.
        /// </summary>
        public SldWorks swApp;
    }
}



namespace Example.csproj
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();

        }
        SolidWorksMacro sw;
        private void  button1_Click(object sender, EventArgs e)
        {
        Form1 f = new Form1(sw);  // jaz tudi nebi vedel od kje je sw :-)
        f.Show();
        this.Close();
        }
    }
}



namespace Example.csproj
{
    public partial class Form1 : Form
    {

        private SolidWorksMacro sw;
        public Form1(SolidWorksMacro sw)
        {
            InitializeComponent();
            this.sw = sw;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            this.sw.PS();
            this.Close();
        }
    }
}




Če naredim sedaj tako dobim error: The name 'sw' does not exist in the current context C:\Users\David\Desktop\MACRO-JI\C#\Example_mod\SwMacro\SolidWorksMacro.cs 15 42 Example


Ta SolidWorksMacro ubistvu zdej še nč ne dela. Jaz bi za začetek samo rad da z form2 odprem form1. Z form1 bi pa rad odprl metodo v glavnem programu. Ko bo to delalo bom pa začel šele zares programirati.

vorantz ::

zakaj bi sploh mel metodo v začetnem classu ki jo kličeš iz PM?
se greš brezveze nek inception tle

pomagaj si z objektnim programiranjem al pa nek statičn class...odvisno kaj hočeš ustvarit


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# težava

Oddelek: Programiranje
233410 (2256) mladec
»

C#, TextBox in PopUp forma

Oddelek: Programiranje
6990 (884) MarCar
»

C# textbox polnjenje

Oddelek: Programiranje
71501 (1366) Mitja Bonča
»

C# iz form2 v form1,textboxi

Oddelek: Programiranje
131820 (1446) Keki
»

C# Pomoč

Oddelek: Programiranje
131294 (1119) jizzer

Več podobnih tem