none
Sdílení zdrojového kódu

    Dotaz

  • Používám Visual studio 2005 a mám 3 projekty .
    1.Windows Application - hlavní projekt 1
    2.Device Application for Windows CE - hlavní projekt 2
    3.Společný - zde mám umístěn  společný kód pro obě aplikace
    v této aplikaci mám třídy označeny stajně jako v hlavních projektech,ručně jsem "přilinkoval"  do "hlavni1.csproj"
    soubory ze společného projektu např.     <Compile Include="..\Common\Form1Common.cs" /> a třídu označil jako partial.
    V hlavním projektu se mi objeví odkaz na soubor "..\Common\Form1Common.cs",což je ok.
    Pokud je třída v hlavním projektu nazvaná stejně jako ve společném projektu a zároveň je to Formulář, poklepem na
    "..\Common\Form1Common.cs" se mi otevře Form z hlavního projektu a při editaci se objeví hláška, že mi chybí soubor s resources.Pokud otevřu pouze kod, vše funguje OK.

    Chci se zeptat jestli existuje nějaké jiné řešení,resp. jestli tento problém je řešen ve VS 2008 nebo existuje-li jiný způsob
    řešení tohoto problému.


    Zrekapituluji požadavek:
    V hlavním projektu chci řešit interfacové(záležitosti prostředí-formuláře...atd,závislé od platformy),
    ve společné části bych chtel mít částčný(partial) kód třídy nezavislý na platformě(např. výpočty).
    Prosim o radu jak to zařídit.


    Děkuji za reakce.

    Petr
    úterý 26. února 2008 13:09

Odpovědi

  • Dobrý den,

    pro společný kód jsou určeny projekty typu ClassLibrary, které referencujete z dalších projektů, kde chcete společnou funkčnost využívat. Není zde vhodné trvat na partial třídách, jejichž použití je jiné. Výpočty jsou naopak tipicky umístěny v samostatných třídách reprezentujících aplikační logiku a společný projekt pak představuje aplikační vrstvu systému.

    úterý 26. února 2008 19:19
    Moderátor
  • Oba formuláře Vám dědí z třídy Form, nejspíš System.Windows.Form, tak si prostě udělejte v ClassLibrary společného předka obou těchto formulářů nějaké

     

    Code Snippet

    public class FormularBase : Form

    {

    ... společné ...

    ... něco virtual ...

    }

     

     

     

     

    a v samotné platform-specific assembly pak dědíte z tohoto FormularBase

     

    Code Snippet

    public class Formular : FormularBase

    {

    ... platformě specifické ...

    ... nějaký ten override, atp. ...

    }

     

     

     

     

    ...jenom pak nedoporučuji do této společné class-library dávat nějakou business či datovou logiku, taková assembly s třídami Forms patří k prezentační vrstvě.

    středa 27. února 2008 13:41
    Moderátor

Všechny reakce

  • Dobrý den,

    pro společný kód jsou určeny projekty typu ClassLibrary, které referencujete z dalších projektů, kde chcete společnou funkčnost využívat. Není zde vhodné trvat na partial třídách, jejichž použití je jiné. Výpočty jsou naopak tipicky umístěny v samostatných třídách reprezentujících aplikační logiku a společný projekt pak představuje aplikační vrstvu systému.

    úterý 26. února 2008 19:19
    Moderátor
  • Dobry den
    dekuji za odpoved.
    ClassLibrary je dobre reseni pro spolecny kod, ktery zpetne nevola metody property hlavniho programu.

    Napr.:
    Common-spolecna cast:
        partial class Formular
        {
            public System.Data.DataSet MyDataSet=new System.Data.DataSet();
            public void InitCommon()
            {
                //inicializuji timer ktery vola RefreshData
     
            }
            public void RefreshData()
            {
                this.LoadData()
      if (MyDataSet.Tables[0].Rows[0][0]==1)
      {
        this.Hide()
      }
            }
       }

    Windows Aplikace

        public partial class Formular : Form
        {
            public Formular()
            {
                InitializeComponent();
      InitCommon();
            }
            public LoadData()
            {
                //tableadapter + napojeni na SQL server......
    Adapter.Fill(MyDataSet);
            }
        }



    Device Aplikace

        public partial class Formular : Form
        {
            public Formular()
            {
                InitializeComponent();
      InitCommon();
            }
            public LoadData()
            {
              MyDataSet.Tables[0].Rows[0][0]=1;
    //vyplnim dalsi data
            }
        }


    Tento priklad je jenom demonstrativni v praxi je to slozitejsi.
    Diky za reakci

    Petr
    středa 27. února 2008 12:02
  • Oba formuláře Vám dědí z třídy Form, nejspíš System.Windows.Form, tak si prostě udělejte v ClassLibrary společného předka obou těchto formulářů nějaké

     

    Code Snippet

    public class FormularBase : Form

    {

    ... společné ...

    ... něco virtual ...

    }

     

     

     

     

    a v samotné platform-specific assembly pak dědíte z tohoto FormularBase

     

    Code Snippet

    public class Formular : FormularBase

    {

    ... platformě specifické ...

    ... nějaký ten override, atp. ...

    }

     

     

     

     

    ...jenom pak nedoporučuji do této společné class-library dávat nějakou business či datovou logiku, taková assembly s třídami Forms patří k prezentační vrstvě.

    středa 27. února 2008 13:41
    Moderátor
  • Diky za odpoved,
    Potreboval bych popis tagu v *.csproj. Nevite kam se podivat?

    Diky
    Petr
    pátek 29. února 2008 8:22