ラベル .NET の投稿を表示しています。 すべての投稿を表示
ラベル .NET の投稿を表示しています。 すべての投稿を表示

2016年6月17日金曜日

無料で .NET アプリを難読化

.NET では逆アセンブルが容易です。.NET Reflector などを使えば簡単にコードが見られます。有償ソフトウェアでは死活問題にもなります。そこで生まれたのが難読化です。

Microsoft も難読化が必要としており、Visual Studio には Dotfuscator の簡易版が同梱されております。ただし簡易版は最低限の難読化のみで文字列の暗号化などは行えません。Professional 版のライセンスは日本で購入するとマシンライセンス1台とユーザーライセンス1人で ¥774,200(税抜) からになります。

無料の難読化ツール

  • ConfuserEx
    文字列の暗号化:対応
    オープンソース
  • DotNet Patcher
    文字列の暗号化:対応
    オープンソース、開発終了?
  • NanDoKu
    文字列の暗号化:非対応
    日本語です
  • Obfuscar
    文字列の暗号化:対応
    オープンソース
  • Phoenix Protector
    文字列の暗号化:対応
    動作に .NET Framework 3.5 が必要
  • PreEmptive Dotfuscator and Analytics CE(Community Edition)
    文字列の暗号化:非対応
    Visual Studio に同梱されている簡易版
  • SharpObfuscator
    文字列の暗号化:非対応
    オープンソース、開発終了?

海外の有名どころは Wikipedia の .NET 用難読化ツールの一覧にまとめてありました。無料で一番高機能なのは ConfuserEx です。過去に無料だったツールも幾つかあります。

私は基本的な難読化と文字列の暗号化が行えれば良いので簡単な Phoenix Protector を使っています。

--2017.02.05
Wikipedia のページが消えていたので Internet Archive のリンクを貼っておきます。

■参考リンク
難読化が必要な理由
.NET 用難読化ツールの一覧 - Wikipedia
Silverlight アプリケーションを Dotfuscator で難読化する - Silverlight - ソーサリーフォース

2015年7月25日土曜日

Visual Studio 2015 リリース

7月20日に Microsoft が Visual Studio 2015 をリリースしました。.NET Framework も 4.6 になりました。


主な製品プラン
  • Visual Studio Community 2015
    価格:無料
    Professional のほぼ全機能が利用可能(一部制限あり)
    主に個人ユーザー向けでライセンス条項をクリアーしないと企業の仕事には使えない
  • Visual Studio Professional with MSDN
    価格:$1,199(新規)、$799(更新)
    全てのユーザー向け、いわゆる基本構成
    2015 からはパッケージがなくなりサブスクリプションのみに
    パッケージ版は Microsoft Store から購入可能になりました
  • Visual Studio Enterprise with MSDN
    価格:$5,999(新規)、$2,569(更新)
    企業向け
  • Visual Studio Express 2015
    価格:無料
    Community と異なりターゲット毎の開発環境 for Desktop, for web など
    主に入門者向けだが、企業の仕事にも使える
    拡張機能など制限がある、Community より動作は軽い

Express は Community に統合されず残りました。Community のライセンスでは業務利用は実質不可能という事で要望が出たのかもしれません。世の流れを見ていると将来的には Community のライセンスは緩和されそうな気もしますが。

2015 からは Professional パッケージがなくなりサブスクリプションのみという、零細個人にとっては厳しい施策になってしまいました。
しかし、製品プランの注釈に
Visual Studio Professional 2015 スタンドアロン ライセンス (サブスクリプションなしの IDE 専用オプションが必要なユーザー向け)
という表記があるので、今後もしかしたら登場するのかも?しれません。
なお Windows 10 SDK は7月29日に登場予定です。

--2016.02.15
去年の11月頃から Microsoft Store で Visual Studio Professional 2015 のパッケージ版が売られています。

■参考リンク
Visual Studio - Microsoft Developer Tools
Visual Studio 2015 and .NET 4.6 Available for Download - Somasegar's blog - Site Home - MSDN Blogs
Visual Studio Professional 2015 のパッケージ版 - Microsoft Store

■関連投稿
Visual Studio 2015 リリース
Visual Studio Community 2013 無料版
Visual Studio Professional 2013 購入
Visual Studio Professional 2013 アップグレード
Visual Studio 2012 Professional 購入

2014年12月10日水曜日

(.NET) WinForms のトグルボタン

Windows Forms でトグルボタンを設置する方法です。

チェックボックスコントロールを配置して Appearance プロパティを Normal から Button に変更します。




■環境
OS:Microsoft Windows Vista Business 日本語 Service Pack 2
IDE:Microsoft Visual C# 2008 Express Edition SP1 - 日本語
Framework:Microsoft .NET Framework Version 3.5 SP1

■参考リンク
【C#】Windowsフォームでトグルボタンを実装する

2014年11月13日木曜日

Visual Studio Community 2013 無料版

MS から .NET サーバー用ランタイムやライブラリ等をオープンソース化する、という発表がありました。元々 .NET コンパイラ等、.NET はオープンソース化が進んでいました。今回の発表によりサーバーサイドアプリは Linux や Mac OS でも開発から実行まで行える様になるらしいです。

(ローカルアプリも含めて?)将来的には Windows、Linux、Mac OS、iOS、Android のマルチプラットフォーム開発が行える様になるとの事です。今まで使って来た言語や技術を活かして、マルチプラットフォームのアプリが作れたら嬉しいですね。

と、ここまでは「良いね~」くらいの発表でしたが Visual Studio Community 2013 無料版 という物も発表されました。

公式HPの Q&A から
  • 無償アプリ開発、有償アプリ開発を問わず利用可能
  • オープンソース貢献目的ならユーザー数制限無し
  • 教育・研究目的はユーザー数制限無し
  • 学校や研究機関などはユーザー数制限無し
  • 非営利組織はユーザー数制限無し
  • 営利組織(PC 250台未満で年商100万米ドル未満の企業)は5ユーザーまで利用可能
  • Visual Studio 2013 Professional 相当(全機能)
  • Visual Studio 拡張機能も利用可能
こんな感じ、でしょうか。

「無料で Visual Studio 2013 Professional 相当」 は、なかなかのインパクトです。個人で Visual Studio 2013 Professional(通常約56,000円、UPG約36,000円) の購入を考えている方は、この Community を使った方がお得です。なお次期バージョンの 2015 からは Express 版は Community 版に統合されるらしいです。

時代が変わり、こういった「大きなソフトウェア」は昔の様に「パッケージ自体で儲ける」やり方が通用しなくなって来ているのでしょうか?利用者としてはありがたいですが。

最近 Apple の後追いが続いています。そろそろ MS の先手が見たいですね。

■Apple
  • デスクトップ OS(バージョンアップ)
    無料でバージョンアップ可能(旧世代のユーザーは格安で)
  • オフィススイート PC 版
    iWork が無料
  • オフィススイート Mobile 版
    iWork が無料 iOS のみ、Android 未対応
  • 統合開発環境(IDE)
    Xcode が無料

■Microsoft
  • デスクトップ OS(バージョンアップ)
    Windows10 は無料か格安でバージョンアップ可能?
  • オフィススイート PC 版
    (オフィスプレミアムのみ)MS Office インストール済みPCはバージョンアップが永年無料
  • オフィススイート Mobile 版
    (若干の機能制限有)MS Office が無料 iOS、Android(来年) に対応
  • 統合開発環境(IDE)
    Visual Studio 2013 Community(Professional 相当) が条件付で無料

--2014.11.22
日本語サイトが出来た様なので参考リンクに追加しました。
しかしQ&Aに気になる内容が
Q: どのように Visual Studio Community の利用可能ユーザーを規定するのでしょうか?
A: 下に示すものは要約版になります。詳しくは製品に同梱されているライセンス使用許諾契約書および Visual Studio ライセンス ホワイトペーパーをご確認ください。
  • 個人開発者は、個人開発者自身の無償または有償アプリを Visual Studio Community を使って開発できます。
  • Visual Studio Community を使える企業体は以下の規定に従います。
    - 研修環境、学術的研究、OSI が認定するオープン ソース ソフトウェア ライセンスに準拠したオープン ソースの開発者プロジェクトに利用する場合、企業体は何人でも Visual Studio Community を利用可能
    - PC 台数 250 台未満 または 年商 1 億円未満の企業は、これに該当する企業のアプリケーション開発においては Visual Studio Community を 5 名まで利用可能
    ※ただし、上記企業が、これ以外の企業からの何らかの報酬を伴う委託に対しアプリケーション開発する場合には Visual Studio Community は利用できません。
これだと個人も企業も、自身で使用するアプリまたは公開するアプリ開発にのみ利用可能で、委託開発での利用は禁止となります。現在の Express よりもライセンス制限が厳しい?
まだ整理中との記載はありますが。

■参考リンク
Visual Studio Community 2013 無料版(英語サイト)
Visual Studio Community 2013 無料版(日本語サイト)

■関連投稿
Visual Studio Community 2013 無料版
Visual Studio Professional 2013 購入
Visual Studio Professional 2013 アップグレード
Visual Studio 2012 Professional 購入

2013年12月12日木曜日

.NET Framework のサポート期限

2013.12.12 時点の情報になります。

.NET Framework のサポートライフサイクル』に記載されている通り
.NET 3.5 SP1 以降より、.NET Framework は Windows OS のコンポーネントとして扱われます。コンポーネントのサポート ライフサイクルは、コンポーネントをホストしている製品もしくはプラットフォームに従います。
という事になっています。実質終了日を参考にして頂けたらと思います。

なお、今後 .NET Framework 4.5.1 を使用した製品が登場したら 4.5.1 の実質終了日は、その製品のサポートライフサイクルに従い延長される事になります。

.NET
Framework
バージョン
延長
サポート
終了日
実質
終了日
付属しているOS開発ツール
2.0 SP22016/04/12
2020/01/14
3.5SP1に準拠
Windows Server 2003 R2Visual Studio 2005
3.0 SP22011/07/12
2020/01/14
3.5SP1に準拠
Windows Vista SP2
Windows Server 2008
Expression Blend
3.5 SP12020/01/14
OSに準拠
2020/01/14
OSに準拠
Windows 7
Windows Server 2008 R2
Visual Studio 2008
42020/09/08
VS 2010に準拠
2020/09/08
VS 2010に準拠
-Visual Studio 2010
4.52023/01/10
OS,VSに準拠
2023/01/10
OS,VSに準拠
Windows 8
Windows Server 2012
Visual Studio 2012
4.5.12024/04/09
VS 2013に準拠
2024/04/09
VS 2013に準拠
Windows 8.1
Windows Server 2012 R2
Visual Studio 2013

2.0 と 3.0 と 3.5 は全て共存できます。3.5 は 2.0 と 3.0 を内包しています。
2.0 や 3.0 向けに開発したアプリケーションは全て 3.5 SP1 で完全動作します。

4 と 4.5 は共存できません。4 と 4.5.1 も共存できません。4 がインストールされている環境に 4.5 系をインストールすると 4 は 4.5 系に置き換えられます。
4 向けに開発したアプリケーションは、極一部の例外を除き 4.5 や 4.5.1 でも問題なく動作します。

--2015.07.21
Visual Studio 2015 と合わせて 4.6 がリリースされました。近くリリース予定の Windows10 に搭載されるのも 4.6 です。この 4.6 はインプレース更新になり 4, 4.5, 4.5.1, 4.5.2 のいずれかがインストールされている環境だと置き換えられます。4.6 まで 4系という事です。

■参考リンク
.NET Framework のサポート概要
.NET Framework のバージョンおよび依存関係 - .NET Framework 4.5 移行ガイド
サポート ライフサイクル - 製品一覧
.NET Framework - Wikipedia

■関連投稿
.NET Framework のサポート期限
Visual Studio 2005 と .NET Framework 2.0 の寿命

2013年12月11日水曜日

Windows 7 に Visual Studio 2005 をインストール

Visual Studio Professional 2012 を完全削除してクリーンな状態の Windows 7 が出来上がりました。クリーンな環境に Visual Studio Professional 2013 をインストールしていたら『Visual Studio は旧バージョンからインストールすれば新旧の混在が可能』という事を思い出してしまいました。インストール中断です。

『来年早々には Windows XP のサポートも終了するし、ついでに旧開発環境も Windows 7 に移行しておこう』という事で、先に Visual Studio 2005 Standard をインストールする事にしました。


その前に Windows 7 で Visual Studio 2005 が動作するか調べないといけません。『Windows 7 Visual Studio 2005』で検索すると、それらしいマイクロソフトの『開発ツール対応 OS 一覧』というページが見つかりました。

Visual Studio 2005 の行を見ると Windows 7 にOKの丸印が付いています。Windows Vista にインストールする時と同じで Visual Studio 2005 Service Pack 1 と Visual Studio 2005 Service Pack 1 Update for Windows Vista をインストールすれば大丈夫との事です。

次はインストール手順を探します。『Windows 7 Visual Studio 2005 インストール手順』で検索すると、またそれらしいマイクロソフトサポートの『Windows Vista に Visual Studio 2005 をインストールする方法』というページが見つかりました。

内容を読むと
1.Microsoft Visual Studio 2005
2.Microsoft Visual Studio 2005 Service Pack 1
3.Visual Studio 2005 Service Pack 1 Update for Windows Vista
の順番でインストールを進める、との事でした。

まずは Visual Studio 2005 を普通にインストールします。途中、プログラム互換性アシスタントが表示されますが、手順通り『プログラムを実行する』をクリックして続行します。暫くするとセットアップ完了の画面が表示されました。

次は Microsoft Visual Studio 2005 Service Pack 1 をインストールします。昔ダウンロードした物があるので、それを『管理者として実行』します。
手順に書かれているダウンロード先は『Visual Studio 2005 Team Suite 用 (Express Editions 以外)』『Visual Studio 2005 Express Editions 用

最後は Visual Studio 2005 Service Pack 1 Update for Windows Vista をインストールします。こちらも昔ダウンロードした物があるので、それを『管理者として実行』します。
手順に書かれているダウンロード先は『Visual Studio 2005 Service Pack 1 Update for Windows Vista

全て無事にインストール完了しました。
Windows XP との違いは起動時に管理者権限が推奨とメッセージが表示される事くらいです。

--2016.03.10
Visual Studio 2005 サポート終了のお知らせ | Visual Studio 日本チーム Blog
今までありがとう。

■参考リンク
開発ツール対応 OS 一覧 - マイクロソフト
Windows Vista に Visual Studio 2005 をインストールする方法 - マイクロソフトサポート
Visual Studio 2005 Team Suite 用 (Express Editions 以外)
Visual Studio 2005 Express Editions 用
Visual Studio 2005 Service Pack 1 Update for Windows Vista

■関連投稿
Windows 7 に Visual Studio 2005 をインストール
Visual Studio Professional 2012 アンインストール

Visual Studio Professional 2012 アンインストール

Visual Studio Professional 2013 をインストールする前に、一旦クリーンな環境に戻したいので Visual Studio Professional 2012 と関連コンポーネントを全てアンインストールします。

Microsoft Visual Studio 2010 Tools for Office Runtime (x86) Language Pack をアンインストールした直後に Visual Studio は順番通りアンインストールしないとゴミが残るという事を思い出し作業をストップ。

『Visual Studio 2012 アンインストール』で検索すると Visual Studio サポート チーム blog の『Visual Studio 2012 のアンインストール手順』という記事が出てきました。これに従いアンインストールしていきます。

以下、一部引用
[Visual Studio 2012 アンインストール手順]
[コントロール パネル] で、プログラムをアンインストールするユーティリティを開き、以下のコンポーネントのうち、対象環境に存在するものについて、順にアンインストールします。

1. Microsoft Visual Studio 2012
※[アンインストールと変更]を選択し、メンテナンス モードより [アンインストールします] を選択ください。
2. Microsoft Web Deploy dbSqlPackage Provider - JPN
3. Microsoft SQL Server Data Tools – JPN (11.1.20627.00)
4. Microsoft SQL Server Data Tools Build Utilities – JPN (11.1.20627.00)
5. Microsoft SQL Server 2012 Management Objects (x64)
6. Microsoft SQL Server 2012 Management Objects
7. Microsoft SQL Server System CLR Types (x64)
8. Microsoft SQL Server System CLR Types
9. Microsoft SQL Server Compact 4.0 SP1 x64 JPN
10. Microsoft SQL Server Compact 4.0 SP1 JPN
11. Microsoft SQL Server 2012 Express LocalDB
12. Microsoft SQL Server 2012 T-SQL 言語サービス
13. Microsoft SQL Server 2012 Command Line Utilities
14. Microsoft SQL Server 2012 Native Client
15. Microsoft SQL Server 2012 Data-Tier App Framework
16. Microsoft SQL Server 2012 Transact-SQL Compiler Service
17. Microsoft SQL Server 2012 Transact-SQL ScriptDom
18. SSDT に必用なコンポーネント
19. Microsoft Visual Studio 2010 Tools for Office Runtime (x64)
20. Microsoft Visual Studio 2010 Tools for Office Runtime (x86) Language Pack - 日本語
21. Microsoft Visual Studio 2010 Tools for Office Runtime (x86)
22. Microsoft ASP.NET MVC 3 - JPN
23. Microsoft ASP.NET MVC 3
24. Microsoft ASP.NET Web Pages - JPN
25. Microsoft ASP.NET Web Pages
26. WCF RIA Services V1.0 SP2
27. Microsoft Web Platform Installer 4.0
28. IIS 8.0 Express
29. Microsoft Web Deploy 3.0

の順番でアンインストールしていたら
10番、未インストール状態
15番、インストール日、サイズ、バージョン全て同じ物が2つ存在
21番、未インストール状態
だったので未インストールは無視して、15番は2つともアンインストールしました。
Visual Studio と一緒にインストールされる関連コンポーネントは SQL Server 関連が多いですね。

後はインストール日でソートして Visual Studio インストール日と同じ日付だったものをアンインストールします。

Entity Framework ???
Microsoft Help Viewer 2.0 Language Pack
Microsoft Help Viewer 2.0
Microsoft Silverlight 5 SDK
Microsoft Silverlight 4 SDK

2005、2008、2010、2012 の Microsoft Visual C++ Redistributable が数件残りましたが
[アンインストールを推奨しないコンポーネントについて]
以下の各コンポーネントも Visual Studio 2012 のインストールによりインストールされます。
しかしこれらはランタイムとして他のアプリケーションから使用されている可能性があるため、アンインストールしないことを推奨します。

Microsoft Silverlight
The Microsoft .NET Framework 4.5
Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.4148
Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.6161
Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.4148
Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.6161
という事なので、これらは残して作業完了、約2時間くらいかかりました。ついでなので CCleaner で掃除して MyDefrag も行いました。

--2019.05.12 追記
Visual Studio 2013 を完全アンイストールする場合は @IT の記事を参考にしてください。

■参考リンク
Visual Studio 2012 のアンインストール手順 - Visual Studio サポート チーム blog
Visual Studio 2017のインストール前に、Visual Studio 2013/2015と2017プレビュー/RC版を完全にアンインストールするには?:.NET TIPS - @IT ※VS 2012 ではない

■関連投稿
Windows 7 に Visual Studio 2005 をインストール
Visual Studio Professional 2012 アンインストール

2013年12月7日土曜日

Visual Studio Professional 2013 購入

Visual Studio Professional 2012 を購入してまだ8ヶ月ですが、現在、アップグレードキャンペーンで Visual Studio Professional 2013 の DVD が安く買えるので在庫があるうちに購入しました。
¥12,383也。

支払方法は PayPal とクレジットカードのみでした。コンビニ払いか代引きで買う予定だったんですけどね。

--2013.12.10
佐川急便の宅配便で届きました。

■参考リンク
Visual Studio Professional 2013 の購入 - Microsoft Store Japan オンライン ストア

■関連投稿
Visual Studio Professional 2013 購入
Visual Studio Professional 2013 アップグレード
Visual Studio 2012 Professional 購入

2013年11月17日日曜日

Visual Studio Professional 2013 アップグレード

今月 Visual Studio Professional 2013 が発売されました。Visual Studio 2012 が発売されてから、まだ1年も経っていません。

また高い金を払って買うのかと、そんなユーザの声が聞こえたのか聞こえなかったのかは不明ですが、同時に Visual Studio Professional 2012 ユーザー限定でアップグレードキャンペーンを行っています。

2013年11月1日~2014年1月31日の期間中であれば、通常 ¥37,590 の Visual Studio Professional 2013 アップグレード版が ¥25,207 OFF の ¥12,383(税込) で購入できる、というお得なキャンペーンです。商売上手ですね。

ダウンロード版、 DVD 版、両方とも同じ値段です。DVD 版は完売していました。キャンペーン終了後のアップグレード版も 2012 ユーザー限定なのかは不明です。いつもの紳士協定の様にアップグレード製品を持ってなくてもインストール出来たりするんですかね。

Visual Studio は毎年この商法でいくのでしょうか?OS もそうなんですが、個人的には頻繁にアップデートされるよりも、長く使える環境を提供して頂いた方がありがたいんですけどね。

--2013.11.22
完売していた DVD 版の在庫が補充されました。

--2013.11.23
また DVD 版は完売しました。再々度の在庫補充は行われるのでしょうか。

--2013.11.28
DVD 版の在庫が補充されました。

■参考リンク
Visual Studio Professional 2013 の購入 - Microsoft Store Japan オンライン ストア

■関連投稿
Visual Studio Professional 2013 購入
Visual Studio Professional 2013 アップグレード
Visual Studio 2012 Professional 購入

2013年6月13日木曜日

(C#, VB.NET)Debug モードと Release モードで接続文字列を変える

アプリケーション構成ファイル(~.exe.config)はユーザースコープの設定は変更可能ですが、アプリケーションスコープの設定は読み取り専用で変更できません。接続文字列はこのアプリケーションスコープになります。

これを、アプリケーション構成クラスのパーシャルクラスを作成して変更している方がいました。そちらの記事は C# なので、こちらでは VB.NET に置き換えて紹介します。

■VB.NET
Namespace My

    ''' <summary>
    ''' アプリケーション構成クラスのパーシャルクラス(接続文字列変更用)
    ''' </summary>
    Partial Friend NotInheritable Class MySettings

        ''' <summary>
        ''' 接続文字列を設定します
        ''' </summary>
        ''' <param name="connectionString" />接続文字列
        Friend Sub SetConnectionString(ByVal connectionString As String)

            Me("プロジェクト名ConnectionString") = connectionString

        End Sub

    End Class

End Namespace

あとはエントリポイントなどで #If ディレクティブを利用して作成したメソッドをコールすれば Debug モードの時だけ接続文字列が変わります。

以下は SQL Server 接続文字列でのサンプルです。
#If DEBUG Then
    ' debug モードの時のみ接続文字列を書き換え
    My.Settings.SetConnectionString("Data Source=DBサーバー名;Initial Catalog=データベース名;User ID=ユーザーID;Password=パスワード")
#End If

そもそも、接続文字列をアプリケーション構成で持たなければ良い話ですが、設定ファイルで持ってるとメンテが楽なんですよね。

既に稼働しているプロジェクトで TableAdapter を多用している場合でも、大元の接続文字列を動的に変更できれば変更箇所はそこだけで済み安全で楽ですね。

C# でのパーシャルクラスは参考リンクのページを参照してください。

--追記
上記の方法でも実現は可能ですが、構成ファイルを切り替える方法が一般的な様です。上記はアプリケーション構成クラスをいじる時の参考にしてください。

■環境
OS:Microsoft Windows XP Home Edition 日本語 Service Pack 3
IDE:Microsoft Visual Studio 2005 Standard Edition 日本語 Service Pack 1
Framework:Microsoft .NET Framework Version 2.0 SP2

■参考リンク
TableAdapterの接続文字列を動的に変更

2013年3月30日土曜日

Visual Studio 2012 Professional 購入

NTT-X が決算セールでしょうか Visual Studio 2012 Professional を値下げしております。
通常価格 55,152円で、さらに割引額 約5,000円です。これだけでも他店に比べると安いですが 20時からだとナイトセールで割引額が 10,172円にアップします。
購入しました。送料・税込 44,980円也。

Visual Studio 2005 から7~8年越しのバージョンアップです。

--追記
届きました。昔の重厚なプラスティックケースに比べると、随分とパッケージが安っぽくなってしまいました。レトルトカレーの外箱みたいです。環境を考えたらこちらの方が良いのでしょう。

--2013.04.01
決算セールが終了したのか、割引は無くなっていました。

■関連投稿
Visual Studio Professional 2013 購入
Visual Studio Professional 2013 アップグレード
Visual Studio 2012 Professional 購入

2013年3月13日水曜日

(C#, VB.NET)スクリーン座標(画面座標)をコントロールから見たクライアント座標に変換

スクリーン座標(画面座標)をコントロールから見たクライアント座標に変換する方法です。

以下は、マウスカーソル座標を取得しフォームのクライアント座標に変換するサンプルです。
■C#
Point p = this.PointToClient(Cursor.Position);
int x = p.X;
int y = p.Y;

■VB.NET
Dim p As Point = Me.PointToClient(Cursor.Position)
Dim x As Integer = p.X
Dim y As Integer = p.Y

xには横軸、yには縦軸の値が入ります。コントロール左上が(0, 0)で基準となり、右はx加算、左はx減算、下はy加算、上はy減算となります。

RightToLeft のアプリケーションではxが逆になるらしいですが、試したらフォームのクライアント座標のみ逆になりました。通常 RightToLeft を使う場面はほとんどないでしょう。

他に、画面座標をコントロール上の座標をスクリーン座標(画面座標)に変換する PointToScreen メソッドがあります。

■環境
OS:Microsoft Windows XP Home Edition 日本語 Service Pack 3
IDE:Microsoft Visual Studio 2005 Standard Edition 日本語 Service Pack 1
Framework:Microsoft .NET Framework Version 2.0 SP2

■関連投稿
(C#, VB.NET)コントロールのスクリーン座標(画面座標)取得
(C#, VB.NET)スクリーン座標(画面座標)をコントロールから見たクライアント座標に変換

(C#, VB.NET)コントロールのスクリーン座標(画面座標)取得

コントロールのスクリーン座標(画面座標)取得方法です。

以下は、フォーム上に button1 というコマンドボタンがあり、そのボタンを基準にスクリーン座標を取得する場合のサンプルです。
■C#
Point p = this.button1.PointToScreen(new Point(0, 0));
int x = p.X;
int y = p.Y;

■VB.NET
Dim p As Point = Me.button1.PointToScreen(New Point(0, 0))
Dim x As Integer = p.X
Dim y As Integer = p.Y

xには横軸、yには縦軸の値が入ります。画面左上が(0, 0)で基準となり、右はx加算、左はx減算、下はy加算、上はy減算となります。

他に、画面座標をコントロールから見たクライアント座標に変換する PointToClient メソッドがあります。

■環境
OS:Microsoft Windows XP Home Edition 日本語 Service Pack 3
IDE:Microsoft Visual Studio 2005 Standard Edition 日本語 Service Pack 1
Framework:Microsoft .NET Framework Version 2.0 SP2

■関連投稿
(C#, VB.NET)コントロールのスクリーン座標(画面座標)取得
(C#, VB.NET)スクリーン座標(画面座標)をコントロールから見たクライアント座標に変換

2012年9月13日木曜日

Visual Studio 2012 Express for Windows Desktop

Visual Studio 2012 Express に WPF、Windows Forms、Win32 の開発が行える Visual Studio 2012 Express for Windows Desktop が追加されました。

当初 Express に上記デスクトップアプリ開発は提供しないとされていましたが、紆余曲折あり今回は提供されました。次期 Visual Studio Express でも提供されるのか?気になるところです。

普段は未だに Visual Studio 2005 を使用し Express に至っては 2008 までしか使用した事のない私ですが 2012 Express を軽く使用してみて 2008 Express より制限緩和と機能進化している事に驚きました。これが 2010 Express からなのかさえ分りません。

気づいた大きなプラスポイントは
  • ソリューション内に複数言語プロジェクト混在可能
    2008 Express では C# や VB.NET プロジェクトをソリューション内に混在させられませんでした。当然ながら Express 以外の製品では可能です。これが可能になっています。
  • データセットデザイナ
    データセットデザイナが搭載されています。これも以前(2008)は Express 以外の製品のみ搭載されていた機能です。
  • ソース管理
    なんとソース管理機能が標準で搭載されています。使ってないので詳細不明。

気づいた主な制限事項は
  • セットアッププロジェクト
    セットアッププロジェクトが作れないのは変わっておりません。
  • レポートデザイナ
    レポートデザイナ非搭載も変わっておりません。

セットアッププロジェクトは ClickOnce で良いプロジェクトなら問題ないでしょう。どうしてもセットアップパッケージが必要な場合は頑張って WiX で作成しましょう。
レポートデザイナは旧バージョンの製品版 Visual Studio で編集するという事で。。。

その他気になった点は、全体的にデザインがフラットになりました。境界線の無いデザインが使いやすいのか使いずらいのか、良く分りません。でも、不自由を感じないという事は、問題は無いのでしょう。今後出てくる MS 製品は全てこのデザインになるのでしょうか。

--2013.03.20
Microsoft SQL Server Data Tools - Business Intelligence for Visual Studio 2012 が公開されました。レポートデザインはこれで行えそうです。

■参考リンク
Microsoft Visual Studio Express 2012 for Windows Desktop | Microsoft Visual Studio
WiX Toolset
Microsoft SQL Server Data Tools - Business Intelligence for Visual Studio 2012

■関連投稿
Visual Studio 2012 Professional 購入

2012年6月9日土曜日

(C#)継承フォームをデザイナで開くとエラー

継承したフォームを Visual Studio のデザイナで開くと『オブジェクト参照がオブジェクト インスタンスに設定されていません。』と、警告になり表示されない問題の対処方法です。

継承元フォームで Load イベントや、表示に係るイベント(Shown, Resize 等)を実装している場合、本来は実行時に発生するイベントが、継承先フォームをデザイナで開く時にも発生します。これは継承したコントロール(カスタムコントロール)でも同様です。

イベント内で this.DesignMode を利用して回避します。
private void Form1_Load(object sender, EventArgs e)
{
    if (this.DesignMode) return;

    //なんらかの処理
}

private void Form1_Resize(object sender, EventArgs e)
{
    if (this.DesignMode) return;

    //なんらかの処理
}
カスタムコントロールを作成した時も同じ症状に遭遇したのですが…忘れてました。へっぽこですね。

これとは別に、継承元フォームにパラメータ付きコンストラクタのみを定義し、デフォルトコンストラクタを削除してしまっている場合や、デフォルトコンストラクタから InitializeComponent() を削除してしまっている場合も『コンストラクタが見つかりません』と警告になり表示されません。
public Form1()
{
    // デフォルトコンストラクタ

    // デフォルトコンストラクタに存在しないとデザイナで警告になる
    InitializeComponent();
}

public Form1(int para1) : this ()
{
    // パラメータ付きコンストラクタ

    // ここに InitializeComponent() を記述し
    // デフォルトコンストラクタに記述しない場合
    // 実行は可能だがデザイナでは警告になる

    // デフォルトコンストラクタに記述し this () で呼ぶか
    // this () を使わず双方のコンストラクタに記述する事でも回避可能

    // 何らかの処理
}


■環境
OS:Microsoft Windows XP Home Edition 日本語 Service Pack 3
IDE:Microsoft Visual Studio 2005 Standard Edition 日本語 Service Pack 1
Framework:Microsoft .NET Framework Version 2.0 SP2

2012年6月2日土曜日

Visual Studio 2012 RC 版公開

Visual Studio 2012 の RC版が公開されました。Visual Studio 11 と言われていた物です。
サポートしているデスクトップ OS は Windows 7 と Windows 8 Release Preview です。

■参考リンク
Visual Studio 2012 RC | Microsoft Visual Studio 2012

2012年3月20日火曜日

(C#, VB.NET)DataGridView から Excel への Copy&Paste で文字化け

DataGridView はプロパティの ClipboardCopyMode が Disable 以外に設定されていると表示されたセルの内容を、そのままクリップボードにコピーする事が可能です。とても便利な機能です。

ところがペースト(貼り付け)先が Excel(エクセル) だと、そのままペーストすると何故か文字化けが起きてしまいます。※未確認ですが Excel2010 では発生しないという情報もありました。

ペーストする時に『形式を選択して貼り付け』で『テキスト』を選択すれば文字化けしませんが、ユーザー一人一人にお願いするのは面倒です。これをコードから行えないものかと色々と調べてみました。

文字化けの原因は Excel がペースト時にクリップボードの内容を HTML Format として解釈してしまうかららしいです。他にも、文字コードの扱いが Excel(Shift-JIS) と DataGridView(Unicode) で異なる、という情報もありましたが、こちらについての真偽は不明です。

DataGridView.GetClipboardContent().GetFormats() でクリップボードに渡されるデータの種類を調べたら Csv, HTML Format, UnicodeText, Text という4つで構成されていました。これを Text だけにしてやれば、文字化けは起きなくなるはずです。

そもそも DataGridView はどうやってコピーのタイミング(DataGridView からクリップボードにデータが渡される)を捕捉しているのでしょう。ソースが見たいです…しかし、私は Visual Studio 2005 ユーザー。

MSDN で GetClipboardContent メソッドを調べてみるとページの最後の方に
継承時の注意 カスタマイズされたクリップボード値を指定するには、このメソッドをオーバーライドします。たとえば、このメソッドをオーバーライドして、カスタムのセル型からの値のコピーをサポートできます。
との事でした。

その他にも Ctrl+C をフックしたり、コンテキストメニュー(右クリックで表示)のショートカットを利用して Ctrl+C を横取りするという情報もありました。

オーバーライドは既存画面の修正が楽です。ユーザーへの分り易さを考えたらコンテキストメニューです。それぞれ一長一短がありますね。

今回は…
GetClipboardContent() メソッドをオーバーライドした、カスタムコントロールを追加作成し既存画面の DataGridView を置き換える事にしました。各画面には『Ctrl+C でコピー可能』とラベル表記するという事で。
次期メジャーバージョンアップの時はコンテキストメニューを組み合わせた方法で対応しようと思います。

■C#
namespace SampleApplication
{
    public partial class DataGridViewSa : DataGridView
    {
        public override DataObject GetClipboardContent()
        {
            DataObject src = base.GetClipboardContent();

            if (src == null) return null;

            string t = src.GetText(TextDataFormat.Text);

            DataObject res = new DataObject(DataFormats.Text, t);
            return res;
        }
    }
}

■VB.NET
Public Class DataGridViewSa
    Inherits System.Windows.Forms.DataGridView

    Public Overrides Function GetClipboardContent() As System.Windows.Forms.DataObject
        Dim src As DataObject = MyBase.GetClipboardContent()

        If src Is Nothing Then Return Nothing;

        Dim t As String = src.GetText(TextDataFormat.Text)

        Dim res As DataObject = New DataObject(DataFormats.Text, t)
        Return res
    End Function
End Class

■環境
OS:Microsoft Windows XP Home Edition 日本語 Service Pack 3
IDE:Microsoft Visual Studio 2005 Standard Edition 日本語 Service Pack 1
Framework:Microsoft .NET Framework Version 2.0 SP2

2011年7月28日木曜日

(C#, VB.NET)サフィックス(接尾語)

 .NET で変数を初期化する時、リテラルに指定するサフィックス(接尾語)です。

■サフィックス(接尾語)
C# VB.NET .NET型 C#
サフィックス
VB.NET
サフィックス
sbyteSByteSystem.SByte--
byteByteSystem.Byte--
shortShortSystem.Int16-S
ushortUShortSystem.UInt16-US
intIntegerSystem.Int32-I
uintUIntegerSystem.UInt32U or uUI
longLongSystem.Int64L or lL
ulongULongSystem.UInt64UL or ulUL
floatSingleSystem.SingleF or fF
doubleDoubleSystem.DoubleD or dR
decimalDecimalSystem.DecimalM or mD
charCharSystem.Char-C
boolBooleanSystem.Boolean--
stringStringSystem.String--
DateTimeDateSystem.DateTime--
objectObjectSystem.Object--

以下は10進型の初期化例と、サフィックスとは関係ありませんが日付型の初期化例。
■C#

    decimal dc = 1.111m;

    DateTime dt = new DateTime(2011, 7, 28);

■VB.NET

    Dim dc As Decimal = 1.111D

    Dim dt As Date = #7/28/2011#
    'Dim dt As Date = New DateTime(2011, 7, 28) 'C#と同様にも書ける

■環境
OS:Microsoft Windows XP Home Edition 日本語 Service Pack 3
IDE:Microsoft Visual Studio 2005 Standard Edition 日本語 Service Pack 1
Framework:Microsoft .NET Framework Version 2.0 SP2

■関連投稿
(C#, VB.NET)データ型

(C#, VB.NET)データ型

.NET のデータ型一覧です。通常はそれぞれの言語に用意された型で書くと思いますが、C# で int を .NET型の Int32 と書いたり、VB.NET でも Integer を Int32 と書いたりと、.NET型を使用する事もできます。

■データ型
C# VB.NET .NET型 bit長 範囲
sbyteSByteSystem.SByte8-128~127
byteByteSystem.Byte80~255
shortShortSystem.Int1616-32768~32767
ushortUShortSystem.UInt16160~65535
intIntegerSystem.Int3232-2147483648~2147483647
uintUIntegerSystem.UInt32320~4294967295
longLongSystem.Int6464-9223372036854775808~
9223372036854775807
ulongULongSystem.UInt64640~18446744073709551615
floatSingleSystem.Single32-3.40282347E+38~3.40282347E+38
doubleDoubleSystem.Double64-1.7976931348623157E+308~
1.7976931348623157E+308
decimalDecimalSystem.Decimal128-79228162514264337593543950335~
79228162514264337593543950335
有効桁数28~29(少数可)
charCharSystem.Char16U+0000~U+ffff(Unicode)
boolBooleanSystem.Boolean-true or false
stringStringSystem.String--
DateTimeDateSystem.DateTime--
objectObjectSystem.Object--

■環境
OS:Microsoft Windows XP Home Edition 日本語 Service Pack 3
IDE:Microsoft Visual Studio 2005 Standard Edition 日本語 Service Pack 1
Framework:Microsoft .NET Framework Version 2.0 SP2

■関連投稿
(C#, VB.NET)サフィックス(接尾語)