Author: anis774
C#|プログラミングに魔法なんてない
HogeクラスからPiyoクラスをインスタンシング。
その時、PiyoクラスのコンストラクタでHogeクラスの参照を渡す
Piyoクラス内にHogeクラスのhogeHogeイベントのイベントプロシージャを作成
PiyoクラスDispose();
HogeクラスでhogeHogeイベント発生。
エラー発生、破棄されたオブジェクトにアクセス出来ません云々。
こんな感じです。油断してました。+=したエベントプロシージャはちゃんと-=で後始末しないといけませんね。VB.NETで言うと、AddHandler,RemoveHandler、だったかな?
なんていうか、その…、
ごめんなさい。
C#|IronPythonとの連携
http://codezine.jp/a/article/aid/2187.aspx
これは面白そうです。
C#|二重起動を禁止して、コマンドライン引数を取得
”C# 二重起動 禁止”等で検索するとMutexを使った方法を紹介したページがヒットしますが、これでは後から起動されようとしたインスタンスのコマンドライン引数を取得出来ません。
自分で、既に起動済みのインスタンスにコマンドラインを渡して、受け側で処理する様に実装しなければいけません。これでは面倒です。VB.NET 2005では簡単に二重起動を禁止して、引数も取得出来ました。
同じクラスライブラリなのだから、VBに出来てC#に出来ない筈は無いと考え、調べてみました。下準備をすればVBと同じ方法で二重起動を禁止し、引数も取得出来ることがわかりました。以下にその方法を紹介します。
まず、”Microsoft.VisualBasic”をプロジェクトの参照に追加します。
そして、次の様にクラスを書きます。
using System.IO;
using Microsoft.VisualBasic.ApplicationServices;
class myApplication:WindowsFormsApplicationBase{
public myApplication()
: base() {
this.EnableVisualStyles = true;
this.IsSingleInstance = true;
this.MainForm = new Form1();//スタートアップフォームを設定
this.StartupNextInstance += new StartupNextInstanceEventHandler(myApplication_StartupNextInstance);
}
void myApplication_StartupNextInstance(object sender, StartupNextInstanceEventArgs e) {
//ここに二重起動されたときの処理を書く
//e.CommandLineでコマンドライン引数を取得出来る
}
}
myApplication_StartupNextInstanceメソッドの中には、VB.NETの方法の時と同じ様にコーディング出来ます。詳しくは検索すればわかりやすいページがあるでしょう。
次に、プログラムのエントリポイントを書き換えます。
using System;
static class Program {
[STAThread]
static void Main(string[] args) {
//Application.EnableVisualStyles();
//Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new Form1());
myApplication winAppBase = new myApplication();
winAppBase.Run(args);
}
}
こんなに簡単な方法があるのに、検索しても紹介されているのを見たことがありません。この方法に何か問題があるのかも知れませんね。
知っている方がいましたらコメント下さい。
C#|axWindowsMediaPlayer
axWindowsMediaPlayerの使い方をググっても情報が少なかったのでメモします。
【準備】
参照設定する。
ツールボックスで右クリック、アイテムの選択
COMコンポーネントタブをクリック
Windows Media Playerをチェック
これでツールボックスにWindows Media Playerが追加されるのでフォームに貼り付ける。
【フォームデザイナでプロパティ設定】
Ctlenabled falseにするとボタン操作が無効になる
stretchToFit 動画、画像がウィンドウのサイズに合わせて変わる。
uiMode none ボタンが表示されない。UIをお好みで実装するならこれ。
full ボタンが表示される。WMPそのまんま。お手軽。
invisible 表示されないって意味らしい。設定したら表示が大変なことになった。オーディオ専用ならこれか、Visible = falseでいい気がするけど。
他に何かあったら教えて下さい。
URL 再生するファイルのパスを渡すとロードして再生の準備をする。settings.autoStart = true なら再生を開始する(既定ではfalseみたい)。
windowlessVideo trueにすると動画が表示されない。用途がわからない。
【メソッドとかプロパティとか】
Ctlcontrols.play() 再生。
Ctlcontrols.stop() 停止。
Ctlcontrols.pause() 一時停止。
Ctlcontrols.fastReverse() 早戻し、出来ないファイル形式があるみたい。
Ctlcontrols.fastForward() 早送り、上に同じ。
Ctlcontrols.currentPosition 再生位置、秒数。
Ctlcontrols.currentPositionString 再生位置、mm:ssの形式。
settings.volume = 0~100 ボリューム
settings.balance = -50~50 左右のバランス
settings.mute 消音。えってぃ動画とか見るなら必須。
status 準備完了とか一時停止とか表示されるあれ。StatusChangeイベントで更新してやるといいみたい。
currentMedia.duration 再生中のファイルの総時間。
他はよくわからなかった。
【シークバーを実装してみる】
再生位置を更新するイベントがいくら探しても見付かりません。どうやら無い様です。Windows.Forms.Timerを使って定期的に更新することにします。スライドにはTrackBarを使います。
再生開始したらTimerをStart()する。Intervalは既定の100でいいと思います。Windous Madia PlayerのPlayStateChengeイベントが使えるかも。currentMedia.durationでファイルの長さが得られるのでintにキャストしてTrackBarのMaxValueにセット。
TimerのTickイベントでCtlcontrols.currentPositionをintにキャストしてTrackBarのValueにセット
これで再生時間が刻々と更新されます。
後はTrackBarの操作で再生位置を操作しましょう。
TrackBarのScrollイベントでTrackBarのValueをdoubleにキャストしてCtlcontrols.currentPositionにセット。
これだけじゃエレガントに動かないので、操作中は更新を止めましょう。
TrackBarのMouseDownイベントでTimerをStop()。MouseUpイベントでStart()するとエレガントに動くようになりました。
以上、WindowsMediaPlayer弄りメモでした。他にも情報がありましたら教えて下さい。
どう書く?org 不動点演算子
理解できません。僕は何をしたらいいのでしょうか?僕にもわかるように要求仕様を教えて下さい。
C#|どう書く?org 総当たり戦の日程作成
どう書く?には珍しく実用的なお題です。
アルゴリズムでかなり悩んでたのですが、書き始めてみたらサクッと出来ました。コードを書く行為そのものに思考をまとめる作用があるようです。
久々の一番乗りです。いぇい。
C#|どう書く?org 文字変換表に基く文字列の変換
C#|どう書くorg情報オリンピック
いやぁ、考えました。そして、閃きました。コーディングに詰まったときは、何か他の事をして遊ぶと良いようです。
http://ja.doukaku.org/comment/5573/
今日一日で3問やりたかったけど、今日は異常に眠くて9割寝て過ごしたので出来ませんでした。
C#|VC#2008
昨晩、Visual C# 2008 Expess Editionをインストールしました。少し弄ってみたのですが、IDEの使い勝手は変わりません。
と、思ったのですが、ヘルプの起動が速くなっています。2005だと待てど暮らせどヘルプが出なかったのに、2008になってサクッと出るようになりました。
エディタはどんなもんよ?と思いFizzBuzzしたら物凄い新機能を発見しました。インテリセンス表示中にCtrlを押すと、インテリセンスの選択メニューが透けるんです!その下のコードが見えるんです!これだけでも乗り換える価値があります。
一番の目玉らしい、LINQとか匿名なんたらとかのC#3.0構文についてもグーグルで調べてみました。なんというか、キモいです。キモぅいです。コードの見た目からして変態臭を漂わせてます。こんなの僕に使いこなせる訳がありません。
VBとVC++も2008にしようかしら。