2012-06-26 12 views
5

Na moim C# Winform (VS 2010/C#/.Net 3.5), utworzyłem przycisk w projektancie. Chcę przenieść i zmienić rozmiar tego przycisku w inne miejsce na podstawie ustawień użytkownika po uruchomieniu tego formularza.Przenieś położenie przycisku po jego pobraniu.

W przypadku obciążenia mojego formularza, mam następujący kod do przenoszenia i zmiany rozmiaru przycisku:

btnShare.Location = new System.Drawing.Point(16, 496); 
btnShare.Margin = new System.Windows.Forms.Padding(4); 
btnShare.Size = new System.Drawing.Size(408, 126); 

Cały kod, aby utworzyć przycisk jest plik * .designer.cs dla tej konkretnej formie.

Problem polega na tym, że: Po załadowaniu formularza widzę przycisk w jego nowej lokalizacji w oparciu o 3 wiersze kodu powyżej. Kiedy jednak formularz zostanie załadowany i przejdzie wszystkie zdarzenia, przycisk powraca do swojej pierwotnej lokalizacji, która znajduje się w metodzie * .designer.cs InitalizeComponent().

Nie chcę pobierać kodu z pliku * .designer.cs i umieszczać go tylko w pliku .cs pliku formularza, ponieważ nadal chcę móc zobaczyć przycisk w projektancie podczas pracy nad plikiem projekt formularza.

Po prostu chcę przesunąć i zmienić rozmiar przycisku, jeśli użytkownik ma tę opcję przełączoną po załadowaniu formularza.

Jak mogę to zrobić, ponieważ .Net wydaje narysować przyciski w moim formularzu po przetworzeniu zdarzenia obciążenia, przenosząc przycisk z powrotem do oryginalnego miejsca?

+2

'InitalizeComponent' należy uzyskiwanie wywołana tylko z konstruktora które dostaje/powinno się nazywa dobrze przed przypadku obciążenia. Postawiłbym punkt przerwania na początku InitalizeComponent, aby zobaczyć, skąd jest wywoływany. –

+0

W którym wydarzeniu występuje ruch i kod zmiany rozmiaru? –

+0

@Paul: InitalizeComponent zostaje wywołany przed zdarzeniem load, ale wygląda na to, że przyciski nie pojawiają się, dopóki wszystkie zdarzenia nie zostaną zakończone. Po załadowaniu formularza widzę ten sam przycisk w dwóch różnych miejscach (pierwotna lokalizacja w pliku designer.cs i nowa lokalizacja, którą mam w zdarzeniu ładowania). Ale zaraz po załadowaniu formularza przycisk znajdujący się w drugiej lokalizacji znika, a pozostawiam tylko oryginalny przycisk utworzony w pliku designer.cs. To tak, jakby kod w pliku designer.cs określał rozmiary/lokalizacje, które przycisk zastępuje kod, który mam w zdarzeniu ładowania. – fraXis

Odpowiedz

7

Oto kod, który właśnie dodałem do siebie. i to działa dla mnie.

To jest SSCCE, prosty, samowystarczalny poprawny przykład. Bardzo przydatne przy zadawaniu pytań na temat SO.

* Ponieważ nie wiem, co się specyficzny problem, tym Prawidłowe, część może nie być dokładny w tym przypadku

spróbować zrobić kopię tego projektu i zobacz, jeśli wystąpi taka sama kwestia. Jeśli tego nie zrobisz Naprawdę nie możemy ci w tym pomóc bez uzyskania dodatkowych informacji o twoim projekcie.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

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

      button1.Location = new Point(40, 40); 
     } 
    } 
} 
Powiązane problemy