前略
・.NET 2012のVC++を使っています。 ファイルをオープンするプログラムをつくろうとしています。その過程でダイアログをオープンするプログラムをネットにあったC#のコードを参考に、openFileDialog1->Dispose();をコメントアウトした以下に示すものをつくりました。このコードは特に問題なくコンパイルできて動作します。
しかし、C#のコードにあった openFileDialog1.Dispose();から変更したopenFileDialog1->Dispose();を追加すると
"error C2039: 'Dispose' : 'System::Windows::Forms::OpenFileDialog' のメンバーではありません。"と云うエラーメッセージがでてコンパイルできません。
<質問>
VC++の場合 C#のopenFileDialog1.Dispose();に相当するオブジェクト破棄のコードは不要なのでしょうか?
もし、破棄が必要なのであればどのようなコードを書けばよいのでしょうか?
どなたかお分かりになる方、ご教示いただければ幸いです。
以上、よろしくお願いします。
//-------------------------------------------------------
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog();//new OpenFileDialog();
openFileDialog1->Title = "ダイアログのタイトルをココに書く";
openFileDialog1->InitialDirectory = "c:\\";
openFileDialog1->FileName = "初期表示するファイル名をココに書く";
if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
MessageBox::Show(openFileDialog1->FileName);
// 不要になった時点で破棄する (正しくは オブジェクトの破棄を保証する を参照)
// openFileDialog1->Dispose();
};
No.2ベストアンサー
- 回答日時:
近年 C++/CLI 触っていないのでうろ覚えですが、C++/CLI では openFileDialog1->Dispose() を呼び出すのに delete を使うんだったと記憶しています。
delete openFileDialog;
gcnew との対称性を重んじたのでしょうね。ダイアログは unmanaged resource なので、CLR がよろしくやってくれるという事はありませんよ。openFileDialog が GC に回収されるまでリソースが残ってしまいます (まあ、それでも良いという態度もあるかも知れませんが、個人的には気持ち悪いです…)。
因みに、構文糖衣ですが ^ を付けずに (あたかも値型の様に) 宣言すると、C# の using と同等のコードを生成してくれます。つまり、自動的にスコープの終端で delete (Dispose) してくれます。
{
OpenFileDialog openFileDialog1;
openFileDialog1.Title = "ダイアログのタイトルをココに書く";
openFileDialog1.InitialDirectory = "c:\\";
openFileDialog1.FileName = "初期表示するファイル名をココに書く";
if (openFileDialog1.ShowDialog() == System::Windows::Forms::DialogResult::OK)
MessageBox::Show(openFileDialog1.FileName);
}
前略
・さっそくご教示ありがとうございます。
openFileDialog1->Dispose(); を delete openFileDialog1; に変更したらコンパイルできました。
・糖衣構文については、まったくしりませんでした。コンパイルして実行を確認しました。勉強になりました。
今後ともよろしくお願いします。
以上
No.1
- 回答日時:
CLIは触っていませんが……。
>VC++の場合 C#のopenFileDialog1.Dispose();に相当するオブジェクト破棄のコードは不要なのでしょうか?
CLRがよろしく処理してくれる…ようです。
まぁ、即座に破棄したい場合はその限りではないようですが。
参考URL:http://fireball.loafer.jp/kes/article_558.html
前略
・ さっそく ご教示ありがとうございました。
しばらくするとCLRが処理してくれるようですが、delete openFileDialog1;で即座に終了処理することとしました。
今後ともよろしくお願いします
以上
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Excel(エクセル) 【VBA】PDF出力に任意のファイル名前を付ける方法 3 2023/07/21 10:55
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/03/28 14:52
- その他(Microsoft Office) ワードのマクロについて教えてください。 1 2023/01/21 16:01
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Exel VBA 別ブックから該当デ...
-
pythonにてseleniumを使うも、...
-
access2003 クエリSQL文に...
-
1、Rstudioで回帰直線を求める...
-
chatgptでつくってもらったコー...
-
MessageBoxで表示される文字列...
-
ExcelのVBAコードについて教え...
-
1日に1人がこなせるプログラム...
-
フィルターかけた後、重複を除...
-
特定行の背景色を変えたいのですが
-
アルファベットに付いて質問し...
-
パイソンプログラム
-
UWSCでMOUSEORG関数が上手く処...
-
COBOLの文法
-
コンパイルエラー 変数が定義...
-
Gitのクローンについて
-
文字コードについて
-
ユーザーフォームに2つのコン...
-
Visual BASIC イベント作成しよ...
-
欠番の抽出について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
Exel VBA 別ブックから該当デ...
-
pythonにてseleniumを使うも、...
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
chatgptでつくってもらったコー...
-
欠番の抽出について
-
JANコードとPOSコードは同じ?
-
JavaScriptの定数名が取り消し...
-
1、Rstudioで回帰直線を求める...
-
特定行の背景色を変えたいのですが
-
変数名「cur」について
-
PreviewKeyDownイベントが2回...
-
将来AIが進歩してくるにつれて...
-
ACCESSユニオンクエリでORDER B...
-
COBOLの文法
-
VBAでファイルオープン後にコー...
-
Nullの使い方が不正です。
おすすめ情報