2011-11-14 11 views
6

UserControl kullanan bir winform uygulaması var. Kullanıcı kontrolünün görevi, kullanıcının Windows Gezgini'nden bir dosyanın üzerine düşmesini, dosyayı açmasını, türünü belirlemesini ve buna göre işlemesini sağlamaktır.DragDrop neden VS2010 altında çalışmıyor?

Bu denetim, Visual Studio 2008 Pro altında PERFECTLY çalıştı. VS 2010 Pro'ya geçtim ve şimdi işe yaramıyor. Farkında olmamız gereken bir bayrak ya da özellik var mı?

Test etmek için hızlı bir demo yaptım. Bu demo, 2008'in altında mükemmel bir şekilde çalışıyor, ancak 2010'un altında çalışmıyor.

Kurulum: Yeni bir winform projesi oluşturun. Bir kullanıcı kontrolü ekle. Kullanıcı denetiminin kod bölümünde aşağıdaki kodu ayarlayın. (kullanıcı denetimini araç kutusunda görünmesini sağlamak için derleyin) Kullanıcı denetimini forma ekleyin. Programı çalıştırın ve pencereden HERHANGİ bir dosyayı forma sürükleyin. Çalışırsa, kullanıcı kontrol alanı renkleri değiştirmelidir.

public partial class UserControl1 : UserControl 
{ 
    public UserControl1() 
    { 
     InitializeComponent(); 

     this.AllowDrop = true; 
     this.DragDrop += new DragEventHandler(UserControl1_DragDrop); 
     this.DragEnter += new DragEventHandler(UserControl1_DragEnter); 
     this.DragLeave += new EventHandler(UserControl1_DragLeave); 
    } 

    void UserControl1_DragLeave(object sender, EventArgs e) 
    { 
     this.BackColor = Color.FromName("Control"); 
    } 

    void UserControl1_DragEnter(object sender, DragEventArgs e) 
    { 
     if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
     { 
      e.Effect = DragDropEffects.Copy; 
      this.BackColor = Color.Blue; 
     } 
     else 
     { 
      e.Effect = DragDropEffects.None; 
     } 
    } 

    void UserControl1_DragDrop(object sender, DragEventArgs e) 
    { 
     this.BackColor = Color.Yellow; 
    } 
} 

herhangi bir açıklama açığım veya Siz biraz düşünebilir düzeltmek!

GÜNCELLEME: Ben aşağıda listelenen bir yorum kullanılarak test

. STILL çalışmıyor. Ancak, geliştirme ortamında sadece başarısız olduğunu belirttim. Bin dizine gidip programı el ile başlattığımda, iyi çalışıyor. Geliştirme ortamında olduğumda, hata ayıklamayı biraz zorlaştırdığımda işe yaramıyor. Hala büyük resmi düzeltmeyi arıyorum.

+0

Griden maviye, mavi üzerine gelin ve VS 2010 yanlısı için benim üzerimde sarıya dönüşür. (Sadece FYI). – KreepN

+0

Yapması gereken şey budur. Çok tuhaf!!! VS2010'mın kızarmış mı yoksa bir şey mi? Her şey mükemmel çalışıyor. Benim için test ettiğin için teşekkürler. Yukarıdaki kurulumdan farklı olan herhangi bir şey yaptınız mı? Diğer etkin anahtarlar/bayraklar/özellikler? – Jerry

+0

Kod yazım denetimini bir kullanıcı denetimine yapıştırdım, form_load üzerinde bir formda bulunan bir panele ekledim ve sonra test ettim. Hiçbir özellik dokunulmadı. Araç kutusundan eklemeniz komik davranmasına neden olabilir. Bahsettiğim gibi program aracılığıyla ekledim: UserControl1 uc1 = new UserControl1(); this.panel1.Controls.Add (uc1); – KreepN

cevap

13

Muhtemel bir hata nedeni UAC'nin kullanıcı arabirim bileşeni olan UIPI'dir. Yükseltilmemiş bir işlemden sürüklenemez ve yükseltilmiş bir işlemin sahip olduğu bir pencereye bırakamazsınız. Visual Studio'yı, Uyumluluk sekmesinde "Bu programı yönetici olarak çalıştır" seçeneğine sahip bir kısayoldan başlattığınızda, bunu tetiklersiniz. Tek geçici çözüm bu seçeneği kapatmaktır. Veya bulduğunuz gibi doğrudan .exe dosyasından çalıştırmak için.

+0

Kutsal saçmalık !! Öyleydi. Kısa bir süre önce kayıt defterine yazmam gereken başka bir kontrol nedeniyle “yönetici” yapmak zorunda kaldım. Çok teşekkür ederim. Beni deli ediyordu. – Jerry

+0

@Hans Visual Studio'dan yönetici ayrıcalıkları altında çalışan standart ayrıcalıklarla bir uygulamayı başlatmanın bir yolunu biliyor musunuz? – d11

+0

Main() uygulamasında Debugger.Launch() öğesini kullanın, böylece programı Explorer'dan başlatabilir ve başladıktan sonra bir hata ayıklayıcıyı alabilirsiniz. –