2011-11-14 25 views
6

私はUserControlを使用するwinformsアプリケーションを持っています。ユーザコントロールの仕事は、ユーザがWindowsエクスプローラからドロップしたファイルを収集し、ファイルを開き、タイプを決定し、それに応じて処理することです。DragDropがVS2010で動作しないのはなぜですか?

このコントロールは、Visual Studio 2008 Proの下で完全に機能しました。私はVS 2010 Proにアップグレードしましたが、今は動作しません。私が気づくべきである変更された旗や財産はありますか?

私は簡単なデモをテストしました。このデモは2008年に完全に機能しますが、2010年にはまったく機能しません。

セットアップ:新しいwinformプロジェクトを作成します。ユーザーコントロールを追加します。ユーザーコントロールのコードセクションに次のコードを設定します。 (コンパイルして、ツールボックスにユーザーコントロールを表示させる)ユーザーコントロールをフォームに追加します。プログラムを実行し、任意のファイルをウィンドウからフォームにドラッグします。それが機能する場合、ユーザーコントロール領域は色を変更する必要があります。

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; 
    } 
} 

皆さんが思うかもしれない説明や修正があります。

UPDATE:私は、下記のコメントを使用してテスト

。 STILLは機能しません。しかし、私は、開発環境でしか失敗しないことに気付きました。 binディレクトリに移動してプログラムを手動で起動すると、正常に動作します。私が開発環境にいるときにはうまく動作しないので、デバッグが少し難しくなります。まだ大きな画像の修正を探しています。

+0

VS 2010プロの私のために、灰色からホバリングで青、黄色でドロップします。 (ちょうどFYI)。 – KreepN

+0

それはそれがすべきことです。非常に奇妙な!!!私はVS2010がトーストなのかなんて不思議です。他のすべては完全に機能します。私のためにテストしていただきありがとうございます。あなたは上記の設定とは何も変わりませんでしたか?その他の有効なスイッチ/フラグ/プロパティ – Jerry

+0

コードをそのままユーザコントロールにペーストし、form_loadのフォームにあるパネルに追加してテストしました。プロパティは触れられませんでした。あなたがそれをツールボックスから追加すると、それが面白いようになるかもしれません。私が言及したように私はプログラムによってそれを追加しました:UserControl1 uc1 = new UserControl1(); this.panel1.Controls.Add(uc1); – KreepN

答えて

13

ここでは、UACのユーザーインターフェイスコンポーネントであるUIPIが原因と考えられます。昇降していないプロセスからドラッグして昇格したプロセスが所有するウィンドウにドロップすることはできません。 [互換性]タブの[管理者としてこのプログラムを実行する]オプションがオンになっているショートカットからVisual Studioを起動したときにこれがトリガーされます。唯一の回避策は、そのオプションをオフにすることです。または、あなたが発見したように.exeファイルから直接実行することもできます。

+0

うわー!!それはそれだった。私は最近、レジストリに書き込む必要がある別のコントロールのために、 "管理者"にしなければなりませんでした。どうもありがとうございます。それは私にナッツを運転していた。 – Jerry

+0

@Hans Visual Studioの標準権限を持つアプリケーションを管理者権限で起動する方法について知っていますか? – d11

+0

Main()でDebugger.Launch()を使用すると、エクスプローラからプログラムを起動し、起動後にデバッガをアタッチすることができます。 –

関連する問題