MaciejZbrzezny

Reputacja

770

Głosów ogółem

użytkownik głosował za tyle razy
46
Użytkownik głosował przeciw tyle razy
2
  • Popularne pytanie
  • Uczony
  • Student
  • Nauczyciel
  • Autobiograf
  • Organizator
  • Wsparcie
  • Redaktor
Prawdziwe imię
Maciej
Członek od
7 miesięcy, 3 tygodnie
Ostatnio widziany
2 miesiące, 1 tydzień temu
Witryna
http://maciej-p...
Miejscowość
Polska
Wiek
30

O mnie

Tworzę oprogramowanie wykorzystujące platformę .NET(głównie C#) i OPC. Zapraszam do odwiedzenia mojego bloga http://maciej-progtech.blogspot.com/.

Pytania: 14

Odpowiedzi: 44

  • 2010-02-27 09:25:25 C# - bazy danych

    Cześć,

    Zajrzyj tutaj: http://www.microsoft.com/poland/developer/net/programowanie/dostepdobaz.mspx (są tutaj podstawy i jakieś proste przykłady)

    Ogólnie w porównaniu do PHP, .NET (i c#) daje duuużo wieksze możliwości, począwszy od możliwości wykonywania kwerend i ręcznego analizowania wyniku (jak w PHP). Jest też możliwość wykorzystania DataSet'ów, które mogą mieć adaptery do bazy danych (nie jest konieczna nawet znać SQL), przyjrzyj się technologi o nazwie ADO.NET, ostatecznie w skomplikowanych przypadkach (np. gdy nasze oporgramowanie ma obsługiwać wiele baz danych) można wykorzystać jakiś ORM. W analizowaniu danych pomaga jeszcze Linq(Language Integrated Query).

    pzdr,

    Maciek

    http://maciej-progtech.blogspot.com/

  • 2010-02-02 18:53:25 View State w ASP.NET

    Witam,

    w ASP.NET jest automat do szyfrowania ViewState

    trzeba w web.config ustawić :

    <configuration>
       <system.web>
          <machineKey validation="3DES" />
       </system.web>
    </configuration>
    

    a na stronie: <%@Page ViewStateEncryptionMode="Always" %>

    więcej tutaj: http://msdn.microsoft.com/en-us/library/aa479501.aspx

    Pozdrawiam,

    Maciek

    http://maciej-progtech.blogspot.com/

  • 2010-01-29 08:21:40 1 program 2 języki

    Witam,

    Według mnie jest co najmniej kilka sposobow:

    Pozdrawiam, Maciek

  • 2010-01-27 14:21:48 Publikowanie projektu na serwerze produkcyjnym

    Witam,

    Według mnie powinieneś wspomóc się następującymi elementami:

    • Wykorzystanie barches i tagów w repozytorium, w pewnym uproszczeniu może to być realizowane następująco: podstawowy kod trzymamy w katalogu trunk (katalog główny) i w pewnych wybranych miejscach robimy na jego podstawie tag (czyli katalog w repozytorium z kopią kodu którą chcemy uważać za pewną wersję) tagi można robić przy pomocy prostego "svn copy". Oczywiście to pewne uproszczenie w przypadku bardziej skomplikowanych projektów może zainstnieć potrzeba tworzenia dodatkowych odgałęzień (branch) w celu pracy nad pewną funkcjonalnościa, która docelowo powinna wrócić do trunk'a.
    • Przydałoby się też oprogramowanie do śledzenia problemów w oprogramowaniu i zarządzania jego wersjami (np. BugNet lub Mantis), tam definiujemy różne wersje, przypisujemy zadania. W efekcie mamy kontrolę co zostało zrobione w danej wersji. Subversion można też zintegrować z takim oporgramowaniem.
    • Kolejnym krokiem może jeszcze być automatyczne wrzucanie kodu serwisu na serwer po stworzniu taga (czyli działającej kompletnej wersji), można to zrobić jako tzw. "post commit hook" który jest dostępny w subversion - czyli skrypt który wykona się po wykonaniu commit. Oczywiście ma to sens tylko w przypadku gdy nie potrzeba kodu dodatkowo buildować (np. w ASP.NET trzeba), w takim przypadku trzeba jeszcze wykorzystać system typu "continues integration"

    Mam nadzieję że to trochę pomogło.

    Pozdrawiam,

    Maciek

    http://maciej-progtech.blogspot.com/

  • 2010-02-02 22:40:42 Czy warto przesiadać się na 7 ???

    Ja jak najbardziej polecam. testuję Win 7 od kiedy stała się dostępna publicznie wersja RC i mam jak najlepsze wrażenia. Interfejs nowego systemu (zwłaszcza superbar czy gesty przy przeciąganiu okien) są na prawdę wygodne i kiedy wracam do WinXP na innym komputerze to już mi pewne ograniczenia przeszkadzają. Oczywiście są też pewne gorsze strony, komputer powinien być wyposażony w przynajmniej 2 GB ramu, aby pracowało się wygodniej, podsystem graficzny jest pod Win 7 bardziej obciążony (nawet przy wyłączonym areo glass), co widać przy oglądaniu materiałów video. Jeżeli chodzi o inne sprawy to kwestia przyzwyczajenia...

    Pozdrawiam,

    Maciek

    http://maciej-progtech.blogspot.com/

  • 2010-02-14 18:50:38 Tworzenie eventów dla obiektu GDI

    Witam,

    Można to zrobić poprzez odziedziczenie po kontrolce (której nadamy kształt taki jak chcemy), czyli np. na głównej formie (oknie) dodajemy obiekty klasy EllipseShape:

        EllipseShape ellipseA = new EllipseShape();
        ellipseA.Width = ellipseA.Height = 100;
        ellipseA.Top = ellipseA.Left = 30;
        ellipseA.BackColor = Color.Red;
        this.Controls.Add(ellipseA);
    

    dodajemy eventy:

        ellipseA.MouseDown += new MouseEventHandler(Ellipse_MouseDown);
        ellipseA.MouseUp += new MouseEventHandler(Ellipse_MouseUp);
        ellipseA.MouseMove += new MouseEventHandler(Ellipse_MouseMove);
    

    a klasa ElipseShape moze miec nastepijacy wyglad:

    public class EllipseShape : System.Windows.Forms.Control
    {
        private GraphicsPath path = null;
    
        private void RefreshPath()
        {
    

    .

           path = new GraphicsPath();
            path.AddEllipse(this.ClientRectangle);
           this.Region = new Region(path);
        }
    
        protected override void OnResize(System.EventArgs e)
        {
            base.OnResize(e);
            RefreshPath();
            this.Invalidate();
        }
    
        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
            base.OnPaint(e);
            if (path != null)
            {
                e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
                e.Graphics.FillPath(new SolidBrush(this.BackColor), path);
                e.Graphics.DrawPath(new Pen(this.ForeColor, 4), path);
            }
        }
    
    }
    

    (Przykład zaczerpnięty z ksiązki: "C# Księga przykładów" , wydawnictwa Microsoft Press).

    W ten sposób można przechwytywać i obsługiwać wszystkie zdarzenia klasy Control.

    Pozdrawiam,

    Maciek

    http://maciej-progtech.blogspot.com/

    UPDATE (po pytaniach w komentarzu):

    Oczywiście override można usunąć, ale wtedy trzeba jawnie dodać handler odpowiedniego zdarzenia, np. :

    public EllipseShape()
    {
        this.Resize += new EventHandler(EllipseShape_Resize);
    }
    
    void EllipseShape_Resize(object sender, EventArgs e)
    {
        RefreshPath();
        this.Invalidate();
    }
    

    Zdarzenia Resize i Paint są zdarzeniami kontrolki, po której dziedziczymy i wywoływane są:

    • Resize - gdy zmieniany jest rozmiar kontrolki, np. podczas wywołania ellipseA.Width = ellipseA.Height = 100;
    • Paint - kiedy system wymusza ponowne narysowanie kontrolki (np. z powodu przesłonięcia innym obiektem, czy zmiany rozmiaru)

  • 2010-01-25 18:18:26 Wzorce projektowe- od czego zacząć

    ja przeczytałem "C#. Wzorce projektowe" bardzo dobra książka, zwłaszcza jeśli ktoś programuje w C# (więcej na ten temat)

  • 2010-01-27 23:39:32 C#: zmiana wartości atrybutu klasy, funkcji, właściwości podczas

    Z rozważań wynika, że rację miał Tomaszs, ale Macpak znalazł na prawdę coś fajnego. Otóż Wartości atrybutów nie da się zmienić, ale za to można stworzyć klasę typu proxy, która będzie zwracała trochę odmienionych informacji odnośnie klasy którą przesłania. Wykorzystując ICustomTypeDescriptor można stworzyć tak klasę proxy, która będzie zwracała inne wartości atrybutów w zależności od jej ustawienia.

    zobaczmy przykład mamy tą klasę którą chcemy zmieniać:

    public class User
    {
        [BrowsableAttribute(true)]
        public string Name { get; set; }
        [BrowsableAttribute(false)]
        public string SecondName { get; set; }
    }
    

    będziemy zmieniać ją przez property grid, ale jako element wybrany w property grid możemy użyć klasy proxy o której mówiłem, mamy więc:

    public partial class Form1 : Form
    {
        User usr;
        AttributesProxyTypeDescriptor proxy;
        public Form1()
        {
            InitializeComponent();
            usr = new User();
            proxy = new AttributesProxyTypeDescriptor(usr); 
            propertyGrid1.SelectedObject = proxy;
        }
    
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            proxy.BrowsableAttributeAlwaysTrue = checkBox1.Checked;
            propertyGrid1.Refresh();
        }
    }
    

    natomiast klasa proxy implementuje interfejs ICustomTypeDescriptor :

    public class AttributesProxyTypeDescriptor : ICustomTypeDescriptor
    {
        private object _target;
        public bool BrowsableAttributeAlwaysTrue { get; set; }
        public AttributesProxyTypeDescriptor(object target)
        {
            if (target == null) throw new ArgumentNullException("target");
            _target = target;
            BrowsableAttributeAlwaysTrue = false;
        }
    
        object ICustomTypeDescriptor.GetPropertyOwner(PropertyDescriptor pd)
        {
            return _target;
        }
    
        AttributeCollection ICustomTypeDescriptor.GetAttributes()
        {
            return TypeDescriptor.GetAttributes(_target, true);
        }
    
        string ICustomTypeDescriptor.GetClassName()
        {
            return TypeDescriptor.GetClassName(_target, true);
        }
    
        string ICustomTypeDescriptor.GetComponentName()
        {
            return TypeDescriptor.GetComponentName(_target, true);
        }
    
        TypeConverter ICustomTypeDescriptor.GetConverter()
        {
            return TypeDescriptor.GetConverter(_target, true);
        }
    
        EventDescriptor ICustomTypeDescriptor.GetDefaultEvent()
        {
            return TypeDescriptor.GetDefaultEvent(_target, true);
        }
    
        PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty()
        {
            return TypeDescriptor.GetDefaultProperty(_target, true);
        }
    
        object ICustomTypeDescriptor.GetEditor(Type editorBaseType)
        {
            return TypeDescriptor.GetEditor(_target, editorBaseType, true);
        }
    
        EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[] attributes)
        {
            return TypeDescriptor.GetEvents(_target, attributes, true);
        }
    
        EventDescriptorCollection ICustomTypeDescriptor.GetEvents()
        {
            return TypeDescriptor.GetEvents(_target, true);
        }
    
    
        PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties()
        {
            return ((ICustomTypeDescriptor)this).GetProperties(null);
        }
    
        PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties(Attribute[] attributes)
        {
            PropertyDescriptorCollection props_tobereturned = new PropertyDescriptorCollection(null);
            if (BrowsableAttributeAlwaysTrue)
            {
                foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(_target, true))
                {
    
                    props_tobereturned.Add(new MyPropertyDescriptor(prop, attributes));
                }
            }
            else
            {
                props_tobereturned = TypeDescriptor.GetProperties(_target, attributes, true);
            }
            return props_tobereturned;
        }
    
    }
    

    gdzie MyProperyDescriptor to:

    public class MyPropertyDescriptor : PropertyDescriptor
    {
        private PropertyDescriptor _field;
    
        public MyPropertyDescriptor(PropertyDescriptor field, Attribute[] attributes) :
            base(field.Name, attributes)
        {
            _field = field;
        }
    
    
        public override bool Equals(object obj)
        {
            MyPropertyDescriptor other = obj as MyPropertyDescriptor;
            return other != null && other._field.Equals(_field);
        }
    
        public override int GetHashCode() { return _field.GetHashCode(); }
    
        public override bool IsReadOnly { get { return _field.IsReadOnly; } }
        public override void ResetValue(object component) { _field.ResetValue(component); }
        public override bool CanResetValue(object component) { return _field.CanResetValue(component); }
        public override bool ShouldSerializeValue(object component) { return _field.ShouldSerializeValue(component); }
        public override Type ComponentType { get { return _field.ComponentType; } }
        public override Type PropertyType { get { return _field.PropertyType; } }
    
        public override object GetValue(object component) { return _field.GetValue(component); }
    
        public override void SetValue(object component, object value)
        {
            _field.SetValue(component, value);
            OnValueChanged(component, EventArgs.Empty);
        }
    }
    

    w ten sposób wykorzystując jakiś zewnętrzny pstyczek (np. checkbox) możemy pokazywać lub nie pole "second name".

    Dodatkowo na moim blogu zamieściłem przykład i kod: http://maciej-progtech.blogspot.com/2010/01/c-zmiana-wartosci-atrybutu-podczas.html.

  • 2010-01-28 22:02:02 C# otwieranie linków w przeglądarce

    witam,

    Według mnie nilphilus ma racje, trzeba uruchomić w osobnym wątku, by nie trzeba było czekać na uruchomienie przeglądarki. Ja miałem kiedyś podobny problem i rozwiązałem go następująco:

      RunMethodAsynchronously runasync = new RunMethodAsynchronously( delegate( object[] o )
      {
        System.Diagnostics.Process.Start("http://alleprawda.pl/");
    
      } );
      runasync.RunAsync();
    

    gdzie klasa RunMethodAsynchronously ma postać:

     public class RunMethodAsynchronously
      {
        public delegate void AsyncOperation(object []parameters);
        private AsyncOperation m_asyncoperation_internal;
        private AsyncOperation m_asyncoperation;
        private void MyAsyncOperation( object[] parameters )
        {
          try
          {
            m_asyncoperation_internal( parameters );
          }
          catch
          {
            //do nothing
          }
        }
        private void MyAsyncCallback(IAsyncResult ar)
        {
          m_asyncoperation.EndInvoke( ar );
        }
        public RunMethodAsynchronously( AsyncOperation asyncoper )
        {
          m_asyncoperation_internal = asyncoper;
          m_asyncoperation = new AsyncOperation( MyAsyncOperation );
        }
        public void RunAsync( object [] parameters )
        {
          AsyncCallback callBack = new AsyncCallback( MyAsyncCallback );
          m_asyncoperation.BeginInvoke( parameters,callBack,null );
        }
        public void RunAsync()
        {
          RunAsync( null );
        }
      }
    

  • 2010-01-29 18:44:28 Procent udziałów na rynku przeglądarek

    cześć,

    statystyki z ostatniego roku dla :

    http://maciej-progtech.blogspot.com/

    1. Firefox 59,84%
    2. Internet Explorer 16,48%
    3. Opera 15,36%
    4. Chrome 6,94%
    5. Mozilla 0,56%
    6. Safari 0,51%
    7. SeaMonkey 0,07%
    8. (not set) 0,07%
    9. Opera Mini 0,07%
    10. Googlebot 0,04%