16

Biraz karmaşık bir UserControl var ve Visual Studio 2008 onunla çalışırken oldukça zararsız bir sıkıntı veriyor. Her zaman tasarımcı ile kontrolü açtığımda, tasarımcı tarafından belirlenen bazı zararsız değerleri derhal değiştirmeye karar verir - Boyut özelliklerinin ilklendirilmesi. Bu değişiklikleri kaydedip kapatırsam ve yeniden açarsam, neredeyse her zaman kontrolümün bir başka bileşeninin ilk büyüklüğü değişmiş, sonsuza dek değişmesi gerektiğine karar verir. Neyse ki bu değişiklikler her yerde otomatik boyutlandırma kullandığım için zararsızdır, ancak bu çalışmak için oldukça can sıkıcıdır. Neyin yanlış gittiğini anlamaya başlayacağım en sersemlemez, şu an tek düşüncem şu: Tasarımcı, her kontrol açtığımda otomatik boyutlandırma sonuçlarını başlangıç ​​boyut alanlarına atamaktadır. Sebepler/düzeltmeler hakkında herhangi bir fikrin var mı?Visual Studio Tasarımcısı her zaman denetimimi değiştirmeye çalışıyor

Düzenleme: Ayrıca, uygulamanın çalışır genelinde belli boyutlandırılabilir çocuk bileşenlerinin boyutları kaydetmek için Uygulama Ayarlarını kullanıyorum, ama gerçekten Tasarımcı bu sadece bir varsayılan kullanarak olması gerektiğini anlamak için yeterince zeki olduğunu umuyoruz.

+0

Ben de bunu anlıyorum, bu gerçekten rahatsız edici bir durumdur, çünkü her zaman kaynak kontrolü için beni uyarır, ve arada bir değişiklik yapar! – GWLlosa

+2

Visual Studio 2012'de, özel denetimimin içindeki çocuk denetimlerinin yeniden boyutlandırıldığı aynı sorunu yaşıyorum. Sizin için çalışan bir çözüm hakkında herhangi bir kelime? – almostProgramming

cevap

5

Doğru, tasarımcı genellikle varsayılan değerlerini özelliklerine eklemeye çalışır.

mülkiyet beyanı üzerine ekleyin: tasarımcı söyleyecektir

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 

bu özelliği göz ardı etmek.

+0

Bunu, Bütçe özelliğiyle, Denetimden devralındığı ve sanal olmayan (iyi bir şekilde, yeniden sınıflandırma olmadan ve aptal olan ana sınıfa borulama olmadan) yapamıyorum. Ayrıca, çoğunlukla kutunun dışında bileşenleri kullanıyorum, bu yüzden tüm bunları kendi türetilmiş sınıflarıma değiştirmek zorundayım, gerçekten de iyi bir seçenek değil. –

+0

Boyut özelliğini kontrol etmeden nasıl "kontrol edebileceğinizi" göremiyorum. – Benjol

1

Biraz benzer bir sorunum var. Infragistics GroupBox'ı, devraldığım ve şimdi türetilmiş sınıftaki görünümünü ve görünümünü değiştirmek isteyen bir kullanıcı denetiminde kullanıyorum. Temel sınıfta korumalı yaptım - bu yüzden türetilmiş sınıftaki özellikleri değiştirmeme izin veriyor. Ama onu kurtarmaz. Her açtığımda - temel sınıfın eski değerlerini geri alırım.

Herhangi bir fikrin var mı?

Düzeltme: Bunu çözdüm.

Yukarıdaki yanıtlardan birine çeşitli değerler denemek. [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] yerine [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] kullanmak, değiştirilen özellikler için kod oluşturur ve işler istediğiniz gibi çalışır.

0

Denetiminizin DefaultSize özelliğini geçersiz kılmayı deneyin.

MSDN 'dan: DefaultSize özelliği, ilk oluşturulduğu zaman kontrolün boyutunu temsil eder.

+0

Boyutları değişiyor olan benim kontrolüm değil, hepsi Boyutları değiştirilen çocuk denetimleri. –

8

Belki de size yardımcı olabilir:
Bir özel UserControl eklerseniz, FormDesigner'ın (WPF, Web yok vb.) Garip bir davranışı olduğunu farkettim.
Diğer denetimlerin (GroupBox, EditBox, ComboBox) boyutunun rastgele bir değişmesi var (bana genişlikte oldu).
Yeniden boyutlandırmak için seçilen denetimler rasgele görünüyor, ancak vs2010'un yeniden başlatılmasında her zaman aynıdır. Silinen ve yeniden yerleştirilirse, tasarımcı farklı bir kontrol seçer ...

UserControl'üm AutoScaleMode özelliğini "Font" dan "Inherit" e değiştirdim ve bir daha olmadı.

+0

Evet, tam olarak. belki açıkça belirtmedim. WPF ve WebDesigner'I KULLANMAYAMIYORUM. –

+0

Üzgünüz, neden WPF hakkında cevap verdiğinizi düşündüm. –

+1

AutoScaleMode yardımcı oldu. Benim durumumda bunu Yok olarak ayarlayın. – transistor1