最初から確認したのはこの点ですね、ファイルを全て保存してから、開いているファイルも全部閉じている状態で、もちろんハードディスク上のファイルもリードオンリーになってません。
ファイルはリードオンリーなら、STUDIOは正しい動作をしていることになりますね。
最初から確認したのはこの点ですね、ファイルを全て保存してから、開いているファイルも全部閉じている状態で、もちろんハードディスク上のファイルもリードオンリーになってません。
ファイルはリードオンリーなら、STUDIOは正しい動作をしていることになりますね。
MSDNについているVisualStudio2005を利用して、MFCの拡張DLL群(15個)を開発しています。
DLLプロジェクトにあるダイアログ上のボタンのクリックイベントハンドラの追加に、イベントハンドラウィザードを利用すると、「コード要素`CXXXXDlg`が読み取り専用であるため、追加と削除操作は出来ません。」とのエラー発生し、追加できない状況です。
ベントハンドラウィザードを利用しハンドラの追加などは開発の最初は大体OKでしたが、最近になってラウィザードでのハンドラ追加は全然出来なくなりました。
このエラーメッセージは何にを意味するのでしょうか?全然わけが分からない内容で困っています。
BUGではないでしょうか?ご存知の方いらっしゃいませんか?
開発環境はWindowsXPProfessionalOS(SP2)に
Microsoft Visual Studio 2005
Version 8.0.50727.42 (RTM.050727-4200)
Microsoft .NET Framework
Version 2.0.50727
インストールされている Edition: Enterprise
Microsoft Visual Basic 2005 77952-113-3000004-41755
Microsoft Visual Basic 2005
Microsoft Visual C# 2005 77952-113-3000004-41755
Microsoft Visual C# 2005
Microsoft Visual C++ 2005 77952-113-3000004-41755
Microsoft Visual C++ 2005
Microsoft Visual J# 2005 77952-113-3000004-41755
Microsoft Visual J# 2005
Microsoft Visual Studio Tools for Office 77952-113-3000004-41755
Microsoft Visual Studio Tools for the Microsoft Office System
Microsoft Visual Web Developer 2005 77952-113-3000004-41755
Microsoft Visual Web Developer 2005
Visual Studio 2005 Team Edition for Developers 77952-113-3000004-41755
Microsoft Visual Studio 2005 Team Edition for Software Developers
Crystal Reports AAC6G-J0CSA4B-U7000AN
Crystal Reports for Visual Studio 2005
私の場合は2008ですが、
「CMy100327vc9mfcviewが読み取り専用でイベントハンドラが追加できません」 と出たかと思います。コメントは正確ではありません。
数時間悩んだ結果、
間違ったイベントハンドを追加してしまいその処置が不適切だったことが原因だったようです。
具体的には
class CMy100327VC9MFCView 内のコメントアウトを
// afx_msg void OnMenuSc6r();
とすべきところ
VB風に
' afx_msg void OnMenuSc6r();
としてしまいまったのが、原因だったようです。最近VBAばかり使っていて間違えてしまいました。
同じ現象が発生していましたが、ncbファイルを削除したら直りました。
私も同じような現象がでました。
メッセージマップやなんやらかんやら、余計なものがはいってないか、ファイルが読み取りになっていないか全て確認しましたが、原因がわかりませんでした。
解決法を見つけたのですが、これも何故だかサッパリわからないのですが…
1.ダイアログにボタンやタブ等を配置し、ID名を設定する
2.ファイルを保存し、いったん閉じる
3.再び開き、先ほど追加したものにメンバ変数を追加したり、イベントを追加する
一度保存し、再び作業を再開すると、動くようになりました。
ソリューションのクリーンとかリビルドとかあらゆることをしてもダメだったのに…不思議ですね(汗
同様の現象になって、悩みましたが、、、、
私の場合、ViewにOnLButtonDownを入れようとして発生しました。
VC6で作ったプロジェクトをずっと使い回していました。
結局
BEGIN_MESSAGE_MAP(CxxxxView, CView)
。。。
ON_WM_LBUTTONDOWN() <===この行が以前から残っていたようです。
。。。
END_MESSAGE_MAP()
これが残っていたため、イベントハンドラを入れようとすると、
ファイルが読み取り云々というエラーメッセージが出ていたようです。
これ以外にも
.h に 未定義の関数が残っていました(実呼び出しが行われないためにエラーにはならない)。
上記のコードが残っていた理由はたぶん
一度OnLButtonDownを追加して、手操作でメンバを消した時に、メッセージマップから
削除をし忘れたのだと思います。
いずれにせよ、ファイルの読み取り云々というメッセージはいい加減なメッセージですね。
VC++2005standardで、ずっとこの現象に悩まされ続けていますが、
・ソースファイルの追加をしなおす
・該当ファイルを閉じる
等をためしても、これだという改善方法は見つかりません。
また、この現象が起きた場合に、一度開発環境を終了し、他のアプリケーションを全て閉じる等して
マシンの動作を軽くした状態にした後で再度試すと出来たりする場合もあります。
ソースを解析する負荷が大きい場合に発生するのかな?とも思っているのですが、どうなのでしょうか?
# コントロールにイベントハンドラの追加をする場合等、この機能がないとかなり不便なのですが・・・
私のVC++2005standardでも同じ現象が発生しました。
「コード要素’ファイルDlg’が読み取り専用であるため、追加と削除操作は実行できません。」
とメッセージが出ました。
これは、「クラスビュー」から「’ファイルDlg’」を選択し「プロパティ」から「メッセージ」
を選択し、「WM_XXXX」から「OnXXXXX」を追加しようとしたら上記メッセージが
出ました。
もちろん、「読み取り専用ファイル」では無いです。
回避方法は、他の方も書かれておりますが、
追加するソースが表示されているようでしたら、
閉じて見て下さい。
私は、これで上記メッセージが出なくなり、
「OnXXXXX」が追加できました。
同じ現象が出ましたが、
書き込みしたいファイルのウィンドウを閉じる(タブ右クリック)と書き込みできるようになりました。
同じことかもしれませんが、ソースファイルのバックアップを取っておき、一度削除してから再度同じクラスを新規追加すると直ります。直った後でバックアップファイルとのマージが必要ですが...
単に削除して同じファイルを『追加』-『既存の項目』で追加しただけでは直りませんでした。
やはり何かのIDがおかしくなっているのでしょうか?自動生成されるファイルを消してみても現象は変化しないので、何処に保存されているIDかは見当が付きませんが...
ビルドメニューから
ソリューションのクリーン、<プロジェクト名>のクリーンを行うと解決できる気がします。
プロジェクトを作り直し、ソースをプロジェクトに追加しなおしたところ解決できました。
プロジェクトファイルの中の、固有のIDがおかしくなっていたのではないかと予想しています。
(本当のところはわかりませんが・・・)
同様の現象で困っています。
・リソースビューでのコントロール右クリック→イベントハンドラの追加
・クラスビューでのクラス名選択状態で、画面上からの関数オーバーロード
上記のような操作をしようとすると、
「コード要素"●●"が読み取り専用であるため、追加と削除操作は実行できません」
というエラーメッセージが表示されてしまいます。
ファイル自体の属性も確認していますが、リードオンリーではありません。
VisualStudioのバグでしょうか。解決方法はないのでしょうか・・・。
同様の現象が起きました。
私の場合は、Windows Mobile のSDKを組み込んでいて発生したのですが、
プロジェクトのプロパティで[構成プロパティ]-[配置デバイス]で「英語版」が
選択されていたのを「日本語版」に選択し直したところ、何故か直りました。