[C#]文字列を大文字/小文字無視して置換する方法 Replace()
C#で文字列を置換する際に、置換元文字列を大文字と小文字を無視してチェックしたい場合があります。 このような場合は、Regex.Replace()メソッドをRegexOptions.IgnoreCaseオプション付きでコールすればよいです。 string inStr = “abc ABC aBc”; string outStr = Regex.Replace(inStr, “abc”, “xyz”, RegexOptions.IgnoreCase);
続きを読む
[C#]Form上の全TextBoxに対し、Ctrl-Aで全選択できるようにする方法
VisualStudioにてWinFormを使用したプログラムを作成時、TextBoxに対してCtrl-Aでテキストの全選択をしたい場合があります。 KeyDownイベントでSelectAll()させればよいのですが、対象となるTextBoxが多いときは、イベントハンドラを追加するのに手間がかかります。 このような場合は、下記のコードでForm上に存在する全てのTextBoxに対して、”Ctrl-Aで全選択”の機能をつけることができます。 private void Form1_Load( object sender, EventArgs e ) …
続きを読む
[DataGridView]改行を含むセル値を、Excelに貼付できるようにする方法
DataGridViewにテキストを表示させているとき、Ctrl-C,VでデータをExcelへコピー&ペーストさせたい場合があります。 通常であれば特にプログラムを書かなくてもコピペは可能なのですが、コピー元となるDataGridViewのセル値に改行が含まれる場合は上手くいきません。 例えば、以下のようなデータがあった場合、Excelへコピペをすると… Excel上では、下記のようにコピー元にあった改行文字の単位で別のセルに値が入ってしまいます。 このような場合は、下記の対処方法をとると解決できます。 ※余談ですが、DataGridViewのセル内で改行を許可するには、下記のよう…
続きを読む
Xamarin Studioを使いたい人が、最初に読むべきチュートリアル資料
新しい開発環境を試してみたい場合、簡単なチュートリアルを参考にしながら、試しに1本プログラムを作ってみると、手の動かし方など基本的な部分を理解するのに役立ちます。 先日、Xamarin Studioを評価してみたですが、下記のサンプルプログラムがわかりやすかったため、メモしておきます。 Xamarin Studioの参考ページ一覧 Xamarin Studioを最初にセットアップする方法 https://github.com/ytabuchi/XamarinHOL/blob/master/XamarinHandsOn_Prepare_JXUG.pdf ハンズオンのドキュメント https://…
続きを読む
[Xamarin] *.xaml.csに書いたInitializeComponent()メソッドでエラーが出る場合
Xamarinでプログラムを作成しているとき、InitializeComponentメソッドを呼び出している箇所で、メソッドが見つからないという意味の赤い波線が表示される場合があります。 具体的には、以下のようなコードです。 public partial class MainPage :ContentPage { public MainPage() { InitializeComponent(); } … }public partial class MainPage :ContentPage { publ…
続きを読む
[C#] AsinItemManager : アマゾンの商品情報を最も取得できるライブラリ
C#で、amazonの商品情報を簡単に取得できるライブラリを作成したので公開します。 ファイルは、1ファイルだけで、下記のソースをコピペするだけで動作します。 using System.Xml; //********************************************************************* /// <summary> amazon商品情報の取得管理クラス /// </summary> //*************************************************************…
続きを読む
C#でReactive Extensions(Rx)その1:まずはIObserver, IObservableを理解する
今回より、C#でRxの使い方を確認していきます。 Rxはデザインパターンの1つであるのObserverパターンを元にしています。 なのでRxを学ぶ前に、まずはC#でObserverパターンを表現するためのIObserver, IObservableクラスの使い方を確認します。 今回作るのは以下のようなコードです。 ここに出てくる、SimpleEventSource/PrintEventListenerクラスを作るのが今回のゴールです。 public void Sample01() { // イベントソースを作る SimpleEventSource source = n…
続きを読む
[C#]WinForm環境でRxを利用するためのインストール方法
VisualStudioでWinFormを使用してプログラミングしているとき、Rx(Reactive Extension)ライブラリを使用する方法を説明します。 ライブラリのインストールは、NuGetを使って参照設定を行うのが最も簡単です。 Unityなど、ゲームエンジンからC# + Rxの組み合わせで開発したい場合も多いかと思いますが、最初からUnity上でUniRxを使って開発すると大変なので、まずはWinForm上で使い方を練習すると良いです。 それでは、作業手順です。 まず、プロジェクトを作成し、ソリューションエクスプローラの参照設定を右クリックします。 メニューにある、NuGetパッ…
続きを読む
C#で2048ゲームのクローンを作る[その6]
今回は、前回に作ったのセルのアニメーション処理を追加します。 アニメーションをさせるということは、各セルに対して定期的に再描画のUpdate処理をコールしてあげる必要があります。このためUpdate処理を実装します。 最初に、Updateメソッドだけを持つインターフェースを作ります。 public interface ITaskBehaviour { void Update(); }public interface ITaskBehaviour { void Update(); } 作ったインターフェースをCellScriptクラスに適用します。Update…
続きを読む
C#で2048ゲームのクローンを作る[その5]
今回は、予定通り盤面に表示させる駒(セル)を管理するクラスを作成します。 これまでのゲームルール作成は一旦置いておき、描画寄りのプログラムになります。 今回作るプログラムで、以下のような盤面の表示を行えるようにします。 CellScriptクラスの作成(概要) まずは、セルを管理するCellScriptクラスを作成します。 大枠だけまず書くと、以下のような感じになります。 CellScript.cs using System.Windows.Forms; using System.Collections.Generic; using System.Drawing; using System; …
続きを読む
[C#]System.Drawing.ColorのListを初期化する方法
C#で、Colorクラスを要素に持つListをまとめて初期化したい場合があります。このような場合、下記のコードで宣言と初期化を一度に行えます。 Colorクラスはコンストラクタで色指定できないので、FromArgb()などのメソッドを使ってインスタンス生成します。 using System.Drawing; public class SomeClass { public List<Color> colorList = new List<Color>{ Color.FromArgb(255, 255,255,0), Col…
続きを読む
[C#]LabelなどGUIコントロールの動的生成コードを一瞬で作る方法
VisualStudioでWinFormを使って画面を作る際、通常はボタンやテキストボックスなどのGUIパーツ(コントロール)を画面から設定していきます。 ツールボックスからパーツをドラッグして、プロパティから各種設定を行うのが通常のパターンですね。 時にはこのコントロールを動的に作成したい場合があります。各コントロールは単なるクラスなので、このような場合でも、動的生成したいコントロールのクラスをnewしてプロパティをセットするプログラムを書けば問題なく動的生成が行えます。 ですが、動的にコントロールを作る場合、何のプロパティをセットしたら自分が思ったような設定になるのか、試行錯誤するのが結構…
続きを読む
C#で2048ゲームのクローンを作る[その4]
今日は、前回の予定通り盤面の管理を別クラスに分けてみました。 リファクタリングを行っただけなので、前回のプログラムとできることは全く同じです。 まずは、画面を管理しているForm1.csファイルです。 盤面管理をBoardManagerに逃がしたので、非常にシンプルになりました。 using System; using System.Collections.Generic; using System.Data; using System.Windows.Forms; namespace Mock2048 { public partial class Form1 : Fo…
続きを読む
C#で2048ゲームのクローンを作る[その3]
今回は、ゲームサイクルの作成を行いました。 以下の細々とした処理を追加し、1回分のゲーム開始->プレイ->ゲームオーバーまで、1周分のサイクルが作れました。 ゲーム状態の管理を追加(isGameOver変数) KeyDown()に、ゲームオーバー判定を追加 KeyDown()に、1手動かすたびに新セルの生成処理を追加 initBoard()に、盤面の初期化処理(ランダムで2セル生成)を追加 addCell()として、新セルの生成のメソッドを追加 slideCell()に、スライドした結果セルの移動があったか否かを取得できるよう修正ゲーム状態の管理を追加(isGameOver変数) KeyDow…
続きを読む
C#で2048ゲームのクローンを作る[その2]
前回は、上キーを押したときのみの処理を書いていましたが、上下左右のキーに対応しました。 これに伴って、上下左右のキーを押したとき、各セルの移動先を求める関数を切り出しました。 移動先を求めるのはgetDestPos()メソッドで、これを利用してセル移動を行うmoveCell()メソッドを実装しています。 他には、方向指定がC#のKeys列挙体の定義を流用していたため、専用のDIR列挙体を作っているなど、細かいところを修正しました。 using System; using System.Collections.Generic; using System.Data; using System.Wi…
続きを読む
C#で2048ゲームのクローンを作る[その1]
これから勉強をかねて、2048というゲームのクローンをWinFormで作ってみようと思います。 2048って何? 一時期ブームになったスマホのゲームアプリで、パネルをスライドさせながら大きな数字を作っていくゲームです。ルールは説明するより、動画を見てもらったほうが早いです。 個人的にはこのゲーム、結構プレイしていて最高で8192まで行った事があります。 作成ルール 本当は一気に作ってしまいのですが、時間が無いので下記のルールで少しづつ進めていきます。 毎週何か作る。本当な毎日少しづつ進めたいけど仕事があるので、週に3回以上は最低目標とする。 作成中のプログラムをBlogにさらす。本当ならいった…
続きを読む
[C#]WinFormでゲーム作成時、カーソル入力を取得する方法
Windows上で.Net Frameworkを使用してゲームなどを作るとき、キー入力を取得したい場合があります。 このような場合、画面内のTextBoxなどにフォーカスが当たっていると、キー入力をフォーカスが当たったコントロールが処理してしまいます。 このような場合は、FormのKeyPreviewをtrueにするとよいです。 実際のキー入力チェック処理は、FormのKeyDownイベントで取得すると便利です。 using System; using System.Windows.Forms; namespace Test01 { public partial cla…
続きを読む
C#からVBScriptのコードを呼び出す一番簡単なサンプル
C#やVB.NETでWindowsのプログラムを作っているとき、プラグインのような形で実行内容をカスタマイズしたい場合があります。きちんと作るには.dllを用意した方が良いですが、小さなツールだとそこまで大げさに作りたくない時もあります。 このような場合は、Microsoft Script Controlというライブラリを使うことで、C#のプログラムからVBScript(*.vbs)やJScript(*.js)のコードを外部スクリプトとして、呼び出すことができます。 今回はVBScriptの関数を呼び出せる最低限のプログラムサンプルを作成しました。 プログラム中のコメントに記載していますが、M…
続きを読む
[C#]TextBoxにファイルをドラッグ&ドロップして、ファイル名入力させる
ツールを作っていると、アプリ内でファイル名を入力する状況がよく発生します。 この際、現在Explorer等で表示しているファイルをドロップすることで、ファイル名を指定できると、操作性が格段にアップします。 今回は、ドラッグ&ドロップでファイル名を指定できるようにします。 まずFormにTextBoxを貼り付け、ArrowDropプロパティをtrueにします。 次に、下記のコードを追加します。 private void TextBox_DragEnter( object sender, DragEventArgs e ) { //ファイルがドラッグされている場合、カーソルを変更する if (e.…
続きを読む
[C#]クリップボードの内容を1行づつ読み込む
クリップボードに入っているテキストを、1行づつ取り出して処理します。 サンプルでは、行番号を付与した上で、TextBoxに結果を表示しています。 using System.IO; private void button1_Click( object sender, EventArgs e ) { // クリップボードのテキストをストリームとして読み込む using( StringReader reader = new StringReader( Clipboard.GetText() ) ) …
続きを読む