Avatar billede amews_aj Nybegynder
07. september 2006 - 23:07 Der er 9 kommentarer og
1 løsning

Forskellige classes i foskellige filer?

1. Hvordan får jeg fat i en string fra "Program.cs" filen fra en anden class fil?

Program.cs
----------
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            doit();
            string Programstring = "test1"; // Her er programstring
        }

        static void doit()
        {
            otherclass classs = new otherclass();
            string stringen = classs.test1;
            Class1 classen1 = new Class1();
            string stringen2 = classen1.stringen2;
            Console.WriteLine(stringen2);
            Console.WriteLine(stringen);
            Console.ReadKey();
        }
    }

    public class otherclass
    {
        public string test1 = "1";
    }
}
--------



Class1.cs
--------
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Class1
    {
        public string stringen2 = "test";
        // Hvordan får jeg her fat i Programstring?
    }
}
--------


2. Og hvad hvis man i Class1.cs har oprettet en class, fx en connection til database

Connection con = new Connection(......);

Hvordan får jeg så fat i con.Open(); fra Program.cs ?


På forhånd tak!
Avatar billede twm Nybegynder
07. september 2006 - 23:11 #1
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    public class Program
    {
        static public string Programstring = "test1"; // Her er programstring

        static void Main(string[] args)
        {
            doit();
        }

        static void doit()
        {
            otherclass classs = new otherclass();
            string stringen = classs.test1;
            Class1 classen1 = new Class1();
            string stringen2 = classen1.stringen2;
            Console.WriteLine(stringen2);
            Console.WriteLine(stringen);
            Console.ReadKey();
        }
    }

    public class otherclass
    {
        public string test1 = "1";
    }
}
Avatar billede arne_v Ekspert
07. september 2006 - 23:12 #2
fordelingen i filer betyder ikke noget for koden

statiske metoder kan refereres via klasse navn

ikke statiske metoder kræver en instans

i dit tilfælde tror jeg at du skal sende streng med over i Class1's constructor
Avatar billede twm Nybegynder
07. september 2006 - 23:13 #3
Sorry glemte lige at rette variablen:
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    public class Program
    {
        static public string Programstring = "test1"; // Her er programstring

        static void Main(string[] args)
        {
            doit();
        }

        static void doit()
        {
            otherclass classs = new otherclass();
            string stringen = classs.test1;
            Class1 classen1 = new Class1();
            string stringen2 = classen1.stringen2;
            Console.WriteLine(stringen2);
            Console.WriteLine(stringen);
            Console.ReadKey();
        }
    }

    public class otherclass
    {
        public string test1 = "1";
        public void DinMetode()
        {
            if (Program.Programstring != null)
            {
            }
        }
    }
}
Avatar billede amews_aj Nybegynder
08. september 2006 - 09:38 #4
Jeg har kun fået svar på Program.cs filen, hvordan får jeg fat i Programstringen fra Class1.cs ?

Og det skal være uden at hente en ny class via
Program pr = new Program();
Da du, hvis det er en windows application vil den åbne endnu en kopi af den oprindelige form, det skal den ikke.

Skriv hvis i ikke forstår.,..
Avatar billede amews_aj Nybegynder
08. september 2006 - 14:10 #5
Jeg prøver lige på en anden måde, læs i koden hvad jeg vil hvor...
Nu er det WinApps.

Form1.cs
----------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void Form1_Load(object sender, EventArgs e)
        {
            this.label1.Text = "Set fra form1";
            // Hvordan får jeg fat i Class1.string_class1 ?
        }
    }
}
----------




Class1.cs
----------
using System;
using System.Collections.Generic;
using System.Text;

namespace WindowsApplication1
{
    class Class1
    {
        // Få fat i Label1 i Form1 ?
        // WindowsApplication1.Form1.Label1.Text = "Set fra Class1";

        string string_class1 = "testit";
    }
}
---------
Avatar billede amews_aj Nybegynder
08. september 2006 - 14:18 #6
Lige tilføjelse til ovenstående:

Min Form1.Designer.cs ser således ud:
-------------


namespace WindowsApplication1
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.label1 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            //
            // label1
            //
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(81, 81);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(35, 13);
            this.label1.TabIndex = 0;
            this.label1.Text = "label1";
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Controls.Add(this.label1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        public System.Windows.Forms.Label label1;
    }
}

-------------
Avatar billede amews_aj Nybegynder
08. september 2006 - 14:19 #7
twm dit forslag virkede mht. ConsoleApps
Why, hvad skal man gøre for det, kan du ikke forklare hvad der skal til, og hvorfor?

Og så vil jeg også gerne have hjælp til ovensteånde WinApp. Hvordan gør jeg deri?
Avatar billede amews_aj Nybegynder
09. september 2006 - 00:29 #8
Det jeg skulle bruge var et forbinde til en database fra Class1, alt efter om der var forbundet eller ej skulle den så skrive i en toolstriplabel på form1. Det fik jeg med hjælp over en chat lavet om således:

    public class BaseForm : Form
    {
        public MySqlConnection ConnectAndShowStatus(ToolStripStatusLabel label)
        {
            label.Text = "Connecting...";
            string connectionStatus = "Connected";

            Class1 cl1 = new Class1();
            MySqlConnection Conn = null;
            try
            {
                Conn = cl1.Connect();
            }
            catch (Exception)
            {
                connectionStatus = "FAILED";
            }

            label.Text = connectionStatus;
            // SHOW UP label
            return Conn;
        }
    }

    public partial class Form1 : BaseForm
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // call BaseForm's (it returns null if fails)
            MySqlConnection Conn = ConnectAndShowStatus(this.toolStripStatusLabel1);
        }
    }

    public class Class1
    {
        public MySqlConnection Connect()
        {
            string ConnectionString = "Database=;Data Source=;User Id=;Password=";
            MySqlConnection Conn = new MySqlConnection(ConnectionString);
            Conn.Open();
            return Conn;
        }
    }

-----
twm dit første svar virkede jo efter mit egentlige spørgsmål, så smid lige et svar igen, så får du pointene...
Avatar billede twm Nybegynder
10. september 2006 - 21:35 #9
Jeg erklærede variablen som en static, det betyder at kan kaldes uden at være en del af et objekt. Dette betyder der kun er én variabel tilgængelig for alle udgaver af klassen. Dvs. derfor skal du huske at hvis du bruger flere form's af samme type samtidig i din application, vil informationen ikke være unik for hver af dine forme.

Derfor er metoden du bruger i din klasse den helt rigtige, da du har en instance member der skal opdateres. Du sender det objekt over der skal opdateres, i stedet for at hente informationen.
Avatar billede amews_aj Nybegynder
10. september 2006 - 22:02 #10
Ok, tak for forklaringen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester