07/02/28 20:39:06
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
2:デフォルトの名無しさん
07/02/28 20:44:00
ごめんなさい
このスレは放置して下さい
3:デフォルトの名無しさん
07/02/28 22:16:01
次スレとして使えばいいんでないの
4:デフォルトの名無しさん
07/02/28 22:24:45
>>3
じゃぁ責任もってテンプレ貼らせてもらうよ
5:デフォルトの名無しさん
07/02/28 22:26:04
Visual C# Express Edition (無料)ダウンロード
URLリンク(www.microsoft.com)
.NET Framework SDK (2.0)
URLリンク(msdn2.microsoft.com)
MSDN Visual C# Express Edition フォーラム
URLリンク(forums.microsoft.com)
Visual Studio ユーザーグループ
URLリンク(vsug.jp)
@IT Insider.NET
URLリンク(www.atmarkit.co.jp)
Insider.NET 会議室 ディレクトリ
URLリンク(www.atmarkit.co.jp)
宇宙仮面の C# プログラミング / C# Programming
URLリンク(ukamen.hp.infoseek.co.jp)
WisdomSoft C#入門
URLリンク(wisdom.sakura.ne.jp)
WisdomSoft Microsoft .NET入門
URLリンク(black.sakura.ne.jp)
どっとねっとふぁん
URLリンク(dotnetfan.org)
緑のバイク 初めてのC# ~ 覚え書き ~
URLリンク(homepage3.nifty.com)
どぼん!の .NET Tips
URLリンク(dobon.net)
.NET のつぼ
URLリンク(park16.wakwak.com)
6:デフォルトの名無しさん
07/02/28 22:27:11
Borland C#Builder2006
URLリンク(www.borland.com)
Turbo C#
URLリンク(www.turboexplorer.com)
.NET Framework 1.1 製品ドキュメント
URLリンク(www.microsoft.com)
---
MSDNライブラリ 2006年6月版
URLリンク(www.microsoft.com)
MSDNをローカルで見れる。
7:デフォルトの名無しさん
07/02/28 22:27:50
11 名前:デフォルトの名無しさん[sage] 投稿日:2007/01/18(木) 19:19:37
質問するときに
~したいのですが、上手くいきません。
~したときにエラーが出ます。
という書き方はイクナイ。
何も書いてないのと同じ☆
~したいのですが、~で~が失敗します。
~したときに~エラーが出ます。
隠さずくわしくかきましょう
8:デフォルトの名無しさん
07/03/01 01:48:33
System.Net.WebClient を非同期で動かすと、
コールバックは呼び出し元のスレッドで発生するわけなんですが、
これってどうやって実現してるんでしょうか?
相手が、Windows.Forms.Control 限定なら、
(Delegate.Target as Control).Invoke
でいけると思いますが、Forms.Control 以外でも
呼び出し元のスレッドでイベントを発生させる方法が
あれば教えてください。
9:デフォルトの名無しさん
07/03/01 07:41:46
> コールバックは呼び出し元のスレッドで発生する
まじで?
10:7
07/03/01 08:34:17
>>9
コールバックされたメソッド内で、Control.InvokeRequired=false なので
呼び出し元のスレッドで動いてると思います。
11:デフォルトの名無しさん
07/03/01 17:47:03
>>10
URLリンク(msdn2.microsoft.com)(VS.80).aspx
このあたりに書いてあるはず
12:8
07/03/03 01:26:09
>>11
ありがとうございました
13:デフォルトの名無しさん
07/03/03 20:46:15
キャプチャーボードからデータを取り込み,Bitmapクラスを用いてBMPデータとしたいのですが,
キャプチャボード上メモリのデータををメインメモリにコピーする方法でつまづいています.
具体的にはカレントフレームのバッファ アドレスを返す関数
byte *fdmpciGetBuffer(void)
があり(これはキャプチャーボードの仕様),
ここからMarshal.Copyを用いてコピーしようとしています・・・が,以下のようなエラーが発生します.
-------エラー
エラー 1 'System.Runtime.InteropServices.Marshal.Copy(int[], int, System.IntPtr, int)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。 C:\files\vcs\LaserPointer\LaserPointer\Form1.cs 200 13 LaserPointer
エラー 2 引数 '1': 'byte*' から 'int[]' に変換できません。 C:\files\vcs\LaserPointer\LaserPointer\Form1.cs 200 26 LaserPointer
-------
-------ソース
unsafe private void CaptureBMP(){
int BMP_WIDTH=640;
int BMP_HEIGHT=480;
Bitmap bmp = new Bitmap(BMP_WIDTH, BMP_HEIGHT, PixelFormat.Format8bppIndexed);
BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, BMP_WIDTH - 1, BMP_HEIGHT - 1), ImageLockMode.ReadWrite, PixelFormat.Format8bppIndexed);
Marshal.Copy(fdmpciGetBuffer(), 0, bmp_data.Scan0, BMP_WIDTH * BMP_HEIGHT);
bmp.UnlockBits(bmp_data);
pictureBox1.Image = bmp;
}
-------
C++でいうMemCpyみたいな奴があれば解決するのか?とも思うのですが,
やり方が分かりません.
どなたかご教授下さい.
14:デフォルトの名無しさん
07/03/03 20:58:44
unmanagedからmanagedにコピーするならMarshal.Copy(IntPtr source, Byte[] destination, Int32 startIndex, Int32 length)だ
15:デフォルトの名無しさん
07/03/03 21:17:26
>>13
Bitmapデータは行末に詰め物があるからStrideから計算して一行ごとにコピーしないとダメだよ
16:デフォルトの名無しさん
07/03/03 21:39:27
こんばんわ、お世話になります。
socketが相手から切断された場合に検地したいのですが、ReadLineの
返値から判断する事は出来るのでしょうか?。
17:デフォルトの名無しさん
07/03/03 21:39:59
できません。
18:デフォルトの名無しさん
07/03/03 21:49:24
>>17
やはり・・色々と試しているのですがエラーもでませんよね
みなさん、どうやって検出されているのですか?
19:デフォルトの名無しさん
07/03/03 21:52:54
Connected
20:デフォルトの名無しさん
07/03/03 22:03:57
クライアント側で切断してもループしたままでした
TcpClient tcp = server.AcceptTcpClient();
while (tcp.Connected)
{
}
21:13
07/03/04 00:33:55
>>15
一度バッファにコピーしてから~という感じでしょうか?
>>13
Marshal.Copy(fdmpciGetBuffer(), bmp_data.Scan0, 0,BMP_WIDTH * BMP_HEIGHT);
としても
-----
エラー 2 引数 '1': 'byte*' から 'int[]' に変換できません。
エラー 3 引数 '2': 'System.IntPtr' から 'int' に変換できません。
エラー 4 引数 '3': 'int' から 'System.IntPtr' に変換できません。
-----
といった感じです.IntPtrってのがそもそも理解できてないので,手のつけようが・・・.
URLリンク(msdn2.microsoft.com)(VS.80).aspx
を読んでも,「何のために」「いつ」使うべきものなのかが分かりません.
22:13
07/03/04 00:35:20
-----
Public Declare Sub RtlMemtoArrMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, ByVal Source As Any, ByVal Length As Long)
-----
Private Sub Timer1_Timer()
Dim num As Integer
Dim i As Long, j As Long
Dim ptr As Long
Dim oldBMP1 As Long, DIBS1 As Long
Dim oldBMP2 As Long, DIBS2 As Long
Dim imgbuff As Long
Dim color As Long
num = fdmpciGetFrameNum
Call fdmpciSingleCapture
window_clear
DIBS1 = CreateDIBSection(window1.hDC, bmpinfo, 0, hMem1, 0, 0)
oldBMP1 = SelectObject(window1.hDC, DIBS1)
DIBS2 = CreateDIBSection(window2.hDC, bmpinfo, 0, hMem2, 0, 0)
oldBMP2 = SelectObject(window2.hDC, DIBS2)
23:13
07/03/04 00:36:50
imgbuff = fdmpciGetBuffer
Call RtlMemtoArrMemory(buff(0), imgbuff, bmpinfo.bmiHeader.biSizeImage * 2)
ptr = 0
For j = (bmpinfo.bmiHeader.biHeight - 1) To 0 Step -1
For i = 0 To (bmpinfo.bmiHeader.biWidth - 1)
Call RtlMoveMemory(buffTemp1(j * bmpinfo.bmiHeader.biWidth + i), _
buff(ptr + 1), _
1)
Call RtlMoveMemory(buffTemp2(j * bmpinfo.bmiHeader.biWidth + i), _
buff(ptr + 0), _
1)
ptr = ptr + 2
Next i
Next j
'バイト配列を操作したものを再びDIBSectionに送る
Call RtlArrtoMemMemory(hMem1, buffTemp1(0), bmpinfo.bmiHeader.biSizeImage)
Call RtlArrtoMemMemory(hMem2, buffTemp2(0), bmpinfo.bmiHeader.biSizeImage)
window1.Refresh
window2.Refresh
'DIBSection削除
Call SelectObject(window1.hDC, oldBMP1)
Call DeleteObject(DIBS1)
Call SelectObject(window2.hDC, oldBMP2)
Call DeleteObject(DIBS2)
End Sub
-------ここまで
24:デフォルトの名無しさん
07/03/04 00:38:17
かなり長くておじゃまかと思いましたが,製品にくっついてたVB6のサンプルソースを転載いたします.
2ch同時に入力可能なキャプチャーボードなので,各所でそのようなサンプルとなっているようです.
(タイマーイベントは33msに一回,つまり30FPSになっている)
これをC#で実装しなおすのが一応の目標なのですが・・・
25:デフォルトの名無しさん
07/03/04 01:10:55
読まずにレスするけど、
byte *fdmpciGetBuffer(void)
の戻り値はbyte配列の先頭アドレスなんだろうから
インポートするときにシグネチャを
[DllImport( hoge.dll )]
IntPtr fdmpciGetBuffer();
ってすりゃいいんでないの?
26:デフォルトの名無しさん
07/03/04 01:31:52
>>25
要領得ない質問者にまともなレスを返すあんたは偉いな。
27:デフォルトの名無しさん
07/03/04 13:28:11
フォームのAllowDropプロパティをtrueにしてもイベントが来ない・・・。
かれこれ半日くらい迷っています・・・。
私にはもうお手上げです・・・(´;ω;`)ブワ
28:デフォルトの名無しさん
07/03/04 13:46:32
>>27
その質問では答えるほうもお手上げだw
29:デフォルトの名無しさん
07/03/04 13:52:13
前スレ埋まってないから
質問はこちらで。
ふらっとC♯, C#(初心者用) Part13
スレリンク(tech板)
30:デフォルトの名無しさん
07/03/04 13:54:27
>>27
Part13のほうでエスパー回答しといたから。
31:デフォルトの名無しさん
07/03/04 14:00:25
>>21
IntPtr アドレス
Int 整数
32:デフォルトの名無しさん
07/03/04 15:37:59
>>30
ありがとうございます。
あちらのほうに返事をしておきました。
33:デフォルトの名無しさん
07/03/04 18:19:32
BitBltについて教えてください
pictureBox1に画像を読み込みForm1にコピーして表示するプログラムです
以下1部省略したその部分です
class USER32 {}
class GDI32
{
public const int SRCCOPY = 0xcc0020;
[DllImport("gdi32.dll")]
public static extern bool BitBlt(IntPtr hdcDst, int xDst, int yDst, int width, int height, IntPtr hdcSrc, int xSrc, int ySrc, int rasterOp);
}
protected override void OnPaint(PaintEventArgs e)
{
pictureBox1.Image = Image.FromFile("C:/test.jpg");
Graphics grfx = e.Graphics;
Graphics g = Graphics.FromImage(pictureBox1.Image);
IntPtr dstHDC = grfx.GetHdc();
IntPtr srcHDC = g.GetHdc();
GDI32.BitBlt(dstHDC, 0, 0, 320, 240,srcHDC, 0, 0,GDI32.SRCCOPY);
grfx.ReleaseHdc(dstHDC);
g.ReleaseHdc(srcHDC);
pictureBox1.Visible = false;
}
BitBltがうまくいかず黒地だけのコピーになってしまいます
ためしにForm1からForm1へのBitBltやるとちゃんと機能していました
pictureBox1のアクセスが出来ていないようです(線などは描けます)
何か足りないのでしょうか?
34:デフォルトの名無しさん
07/03/04 18:34:32
pictureBox1 じゃなくて pictureBox1.Image だろ
SelectObject で srcHDC にコピー元のビットマップを選択してやらにゃならん
……つか PictureBox 使う意味あるのか?
35:デフォルトの名無しさん
07/03/04 18:48:53
>>34
アホなんだから黙ってた方がいいと思うよお前さん。
トンチンカンなこと言っちゃってw
純粋にプログラム的に言えば>>33はどこもおかしくないと思うよ。
いや、BitBltの返り値がboolなのはちょっと違うと思うけど。。
36:デフォルトの名無しさん
07/03/04 18:51:48
回答する前に試しもしない奴に言われたくはないが……。
37:33
07/03/04 19:02:51
質問用にちょっとソース変えてあります
実際はOnPaintから呼んだ先で作業しているのですが
SelectObjectを具体的にどこにどんな風に入れるといいんでしょうか
boolなのはサンプルプログラムの引用なんですが 問題でしょうか?
38:デフォルトの名無しさん
07/03/04 19:06:25
boolで全く問題ないよ
39:デフォルトの名無しさん
07/03/04 19:17:43
おいおいw
Console.WriteLine(sizeof(bool));
Win32のBOOLはlongのエイリアスだから、対応するマネージ型はInt32かUint32
だと思いますよw
40:デフォルトの名無しさん
07/03/04 19:19:38
void で全く問題ないよ
41:デフォルトの名無しさん
07/03/04 19:27:00
DllImport の場合マーシャラは既定では bool を Win32 の BOOL に変換する。
だから何も問題ない。
42:デフォルトの名無しさん
07/03/04 19:29:43
今度は引数と返り値の区別がつきませんか。
困った君ですねまったくw
43:デフォルトの名無しさん
07/03/04 19:43:01
春だよなあ
44:33
07/03/04 19:43:49
pictureBox1.ImageをBitmapにしてSelectObjectするといいんでしょうか
45:デフォルトの名無しさん
07/03/04 19:49:13
SelectObject 関数は調べれば分かる
画像を選択するには HBITMAP を渡す必要があるわけだが、これは Image クラスの GetHbitmap メソッドで取得できる
使用後は SelectObject で元々選択されていたのを選択しなおして、取得した HBITMAP の方は DeleteObject
46:33
07/03/04 20:38:40
C#では
SelectObjectは現在のコンテキスト内には存在しません
エラーが出てしまいます
いつでもいいのでどなたか
pictureBox1.ImageからForm1へのBitBltでのコピー成功例を示してもらえると嬉しいのですが
47:デフォルトの名無しさん
07/03/04 21:41:00
>>39
それを言うならMarshal.SizeOfの値をみなくちゃいけないんじゃないの?
URLリンク(msdn2.microsoft.com)(VS.80).aspx
には規定で4バイトにマーシャリングしてくれるみたいだけど
>>42は何をいってるの?
後学のために教えてちょ。
48:デフォルトの名無しさん
07/03/04 22:11:40
>>46
BitBltなんて多用してるけど、今までなにも問題出てないけどなあ。
主に裏画面(Bitmap)と実画面の間の相互の転送だけど。
SelectObjectの話はヨタだから真に受けちゃダメよw
49:デフォルトの名無しさん
07/03/04 23:41:13
是非とも該当部分のコードを晒してくれ
50:33
07/03/05 00:32:21
実行時にフォーム白地に赤で×が描かれエラーが出るようになってしまった
コンパイラが壊れてしまったのか
それともこれは何か特有の現象?
51:デフォルトの名無しさん
07/03/05 00:51:14
描画メモリに不正アクセスしたっぽい挙動だなぁ
52:デフォルトの名無しさん
07/03/05 01:12:22
e.Graphics を Dispose したとかそんなんじゃね?
ま、原因は幾らでも
53:デフォルトの名無しさん
07/03/05 01:19:22
いやいや、>>50みたいな現象はフォームとかPictureBoxとかに描画するときに
描画メソッドで例外が発生するとそうなる。
例えばデバッグなしでこんなコード実行すると再現できるよ。
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Point[] pts = { new Point(0, 0) };
e.Graphics.DrawLines(Pens.Black, pts);
}
54:33
07/03/05 02:28:20
GDIはデリケートですね エラーは戻せたけど
なにかプロパティをいじらないといけないのかな
55:デフォルトの名無しさん
07/03/05 03:11:40
そもそもどうしてBitBltでなければならないのかを説明しておくれ。
56:デフォルトの名無しさん
07/03/05 03:15:54
e.Graphics.DrawImage() とか、this.BackgroundImage とかではだめなの?
57:デフォルトの名無しさん
07/03/05 08:12:12
いや、33じゃなくてもBitBlt使いたい場面は少なくないはず。
だって該当する機能がGDI+にはないからね。
そういう問いかけはナンセンスだよ。
今日仕事終わったら33の言ってる問題が再現するか試してみようかな。
58:33
07/03/05 10:16:01
BitBltしか知らなかったもんで
これですか
e.Graphics.DrawImage()
これはコピー元の座標指定ができないんですかね?
59:デフォルトの名無しさん
07/03/05 12:20:10
できる。
Graphics.DrawImage()はやたらとオーバーロードが多いので、MSDNライブラリでよく確認して、適切なものを選んで。
なお、俺はOnPaint()で(というか、.NETコントロール全体を通して)BitBltを使うこと自体が間違ってると思うよ。
60:デフォルトの名無しさん
07/03/05 12:36:00
>BitBltを使うこと自体が間違ってる
だからそんなことないって。
例えば描画サーフィスから画像をBitmapに転送することは
GDI+では実現できないんだから。
61:13
07/03/05 12:45:02
>>14 >>15 >>25 >>26
DLLの設定を
-----
[DllImport("fdmpci.dll")]
extern static IntPtr fdmpciGetBuffer();
-----
とし,
Marshal.Copy(fdmpciGetBuffer(), bufArray, 0, BMP_WIDTH * BMP_HEIGHT * 3 * 2);
といった感じで一度bufArray(マネージド)にコピー,
bufArrayは2ch分混在してるので,これを1ch分だけ取り出しbmpArrayとした後,
Marshal.Copy(bmpArray, 0, bmp_data.Scan0, BMP_WIDTH * BMP_HEIGHT * 3);
とすることで解決いたしました.(*3はRGB分)
エスパーの皆さん,ありがとうございました.
62:デフォルトの名無しさん
07/03/05 17:11:45
>>61
fdmpciGetBuffer()でとったバッファはこっちで解放しなくていい仕様なの?
63:33
07/03/05 20:45:10
BitBltを使わないほうが良いというのは.NETの中に全て収めた方が良いということでしょうか
BitBltでは意味不明のところで例の赤×エラーが多発してお手上げ状態になります
e.Graphics.DrawImageとBitmapを使ってやってみました(速さはどうなのか分かりませんが)
ウインドウが隠れても絵が消えないこと
表画面から裏画面への逆コピーが出来ること
裏画面の座標指定が出来ること
表示画面のセーブが出来ること
これらの条件を満たせるようにしました どうでしょうか?
64:33
07/03/05 20:46:14
int d1,x1,y1;
Bitmap _bmp = new Bitmap(300, 300); //表面
Bitmap _bmp2 = new Bitmap(@"C:/test.jpg"); //裏面
Rectangle srcRect = new Rectangle(0, 0, 300, 300);
GraphicsUnit units = GraphicsUnit.Pixel;
protected override void OnPaint(PaintEventArgs e)
{
if (d1 == 0) init();
x1 = 0;
y1 = 0;
srcRect.X = 0;
srcRect.Y = 0;
srcRect.Width = 300;
srcRect.Height = 300;
//常に表面を表示
e.Graphics.DrawImage(_bmp, x1, y1, srcRect, units);
}
private void init()
{
//ここは最初に1度だけやることを書く
//試しに裏の横50から100切り取って表へコピー
Graphics g = Graphics.FromImage(_bmp);
x1 = 0; //表X座標
y1 = 0; //表Y座標
srcRect.X = 50; //裏X座標
srcRect.Y = 0; //裏Y座標
srcRect.Width = 100; //転送X幅
srcRect.Height = 300; //転送Y幅
g.DrawImage(_bmp2, 0, 0, srcRect, units);
g.Dispose();
d1 = 1;
}
65:33
07/03/05 20:50:01
インデント失敗^^
66:デフォルトの名無しさん
07/03/05 21:01:06
どうでしょうか、って言われても
知らんがな、としか答えようがないのでは。。。
67:33
07/03/05 21:14:28
一応画像のやり方のコツはつかみました
教えてくれた方々 どうもありがとう。
68:デフォルトの名無しさん
07/03/05 21:48:03
どうでしょう、っていうか、とりあえずbase.OnPaint()を呼んでないのはよくない。
69:デフォルトの名無しさん
07/03/05 21:51:03
>>64 のコードって、コンストラクタで
Init();
BackgoundImage = _bmp;
とやれば、OnPaint()を使う必要ないんじゃね。
70:33
07/03/05 22:06:23
そうですか
もっと調べてみます
71:デフォルトの名無しさん
07/03/06 12:45:55
http プロトコルで配布されているzipファイルの
日付だけを取得することはできますか?
今は、手動でダウンロードしているんですが、
更新されていたら自動でダウンロードする機能を
つけたいもので。
72:13
07/03/06 14:36:19
>>62
サンプルソース&仕様書を読む限りでは
fdmpciSingleCapture()
でキャプチャー後,
fdmpciGetBuffer()
で得られたアドレスからデータを読み出すだけでokなようです.
(キャプチャーボードへの接続開始,終了時はそれぞれInit,Exitという処理がありますが)
73:デフォルトの名無しさん
07/03/06 14:56:58
WebClient.DownloadFileAsync 内で WebException が発生しているようなのですが、
try{
WebClient.DownloadFileAsync(...);
}catch(WebException){
....
}
と書いても catch できません。DownloadFileAsync 内で発生した例外を catch する
にはどう書いたらよいのでしょうか?
74:デフォルトの名無しさん
07/03/06 20:24:34
>>71
HTTP の仕様、If-Modified-Since を調べなさい
75:デフォルトの名無しさん
07/03/06 21:10:54
つうか HEAD でいいじゃん
76:デフォルトの名無しさん
07/03/06 22:46:59
返してくれるかどうかは相手の鯖次第だけどな
77:デフォルトの名無しさん
07/03/06 22:57:39
>>73
確認してないが、DownloadFileCompleted のイベント引数に入ってないか?
78:73
07/03/06 23:13:32
>>77
ばっちりでした。
ありがとうございました。
79:デフォルトの名無しさん
07/03/06 23:20:37
さっき C# 触ったばかりですが質問ください
int i = 1;
string s = (string) i ;
と、これでは整数型を文字列型にキャストできないようなのですが、
どうすればできるでしょうか
80:デフォルトの名無しさん
07/03/06 23:23:02
string s = i.ToString();
81:デフォルトの名無しさん
07/03/06 23:55:19
>>80 ありがとうございます できました!
ところで、いま VC# 2005 無償版を触っていますが、
プロシージャ(?)を作った際に、 { } は自動で補完してくれないのものなのでしょうかどうでしょうか
82:デフォルトの名無しさん
07/03/07 00:04:58
そんなん補完されても全く嬉しくないな
83:デフォルトの名無しさん
07/03/07 00:05:00
してくれないものです
84:デフォルトの名無しさん
07/03/07 00:32:10
プロシージャて呼ぶのは何やってる人だろう・・・
85:デフォルトの名無しさん
07/03/07 00:42:26
>>84
元コボラーもしくはDB/SQLべったりな人とかはそういう呼び方しそう。
86:デフォルトの名無しさん
07/03/07 00:51:25
VBじゃないの?
87:デフォルトの名無しさん
07/03/07 00:53:56
VBだったらEnd SubなりEnd Functionが補完されるのに、ってことか。
88:デフォルトの名無しさん
07/03/07 00:55:18
>>86
ん? VBでプロシージャなんて呼称でてきたっけ?
89:デフォルトの名無しさん
07/03/07 01:04:16
パルカルあたりが起源の言葉だと思うけど、Cの文化でもプロシージャっていうでしょ。
WndProcのProcじゃん。
90:デフォルトの名無しさん
07/03/07 01:10:28
>>89
パスカルは知らんけど、Cの用語/文化ではプロシージャってのは聞かんぞ。
そりゃWndProcみたいな一部の関数名としては聞くけど。
91:デフォルトの名無しさん
07/03/07 01:15:44
>>89
あぁパスカルか。思い出した。㌧
92:デフォルトの名無しさん
07/03/07 01:30:13
CellValidatingについて教えてください
DataGridViewにて同一行に移動した場合はCellValidatingイベントを
発生させたくないのですが、まったくわかりません。
バカな質問かもしてませんが どなたかおねがいします
93:デフォルトの名無しさん
07/03/07 01:40:37
RowValidating でいいんじゃね?
94:デフォルトの名無しさん
07/03/07 01:53:21
うわ~~
RowValidatingてのがあるんだ
本当にありがとうございます
もっと勉強します
95:デフォルトの名無しさん
07/03/07 07:44:17
XMLDataSourceを使ってGridViewにバインドしたいと考えており
以下の単純なXMLファイルを作成したところ問題なくGridViewにバインドされます。
<ファイル管理>
<ファイル ID="A" ファイル名="AAAファイル" />
<ファイル ID="B" ファイル名="BBBファイル" />
<ファイル ID="C" ファイル名="CCCファイル" />
</ファイル管理>
このXMLファイルには他の定義も必要になるため、もう1階層要素を追加しました。
<どっとねっと>
<ファイル管理>
<ファイル ID="A" ファイル名="AAAファイル" />
<ファイル ID="B" ファイル名="BBBファイル" />
<ファイル ID="C" ファイル名="CCCファイル" />
</ファイル管理>
<別の階層>
<システム ID="AAA" />
<システム ID="BBB" />
<システム ID="CCC" />
</別の階層>
今回必要なのはファイル管理以下の一覧なのでXPath式を
/どっとねっと/ファイル管理
としたところ画面には何も表示されなくなりました。
どのようにしてファイル管理以下の一覧を取得するのでしょうか?
プログラムでDataGridにバインドする前にXMLデータの加工をしてしまえば
できると思うのですが、デザイナ画面で実装イメージが確認したいので
そのようにしたくはありません。
96:デフォルトの名無しさん
07/03/07 07:56:59
スレリンク(tech板:22番)
97:デフォルトの名無しさん
07/03/07 13:04:54
コンパイルした後の、最適化されたソースを見ることはできますか?
どこかのページで見たような気がするのですが。。
98:デフォルトの名無しさん
07/03/07 13:10:48
コンパイルとはCILへのコンパイルのことかJITコンパイルなのか。
前者ならildasmか.NET Reflector、後者ならそのへんのデバッガで
99:デフォルトの名無しさん
07/03/07 15:02:59
VS2005にてビルドを行った時に、中間言語みたいなものを見ることができなかったかなぁと。
よく、解説サイトなんかで、volatileを使った時の結果を見てみましょう
みたいな感じで、volatileをつけたときとつけない時の比較を行ったりしている時に
表示しているコードみたいな。。
VS2005、アセンブリにする直前のソースを表示させる事なんかができないのかなぁと。
無ければ.net reflectorを使ってみます。
ありがとうございます。
100:デフォルトの名無しさん
07/03/07 15:09:03
ILならildasmで見れるだろ
101:デフォルトの名無しさん
07/03/07 15:32:11
おぅ。なるほど~
.net reflectorに目がいってますた
ありがとうございます。
102:デフォルトの名無しさん
07/03/08 23:53:55
DropDownStyle=DropDownList な ComboBox を作りました。
このコンボボックスの状態を ApplicationSetting 保存しようと、
(ApplicationSettings).(PropertyBinding)にTextを設定しましたが、
無視されました。
DropDownList でどの項目が選択状態にあるか保存するには
(ApplicationSettings).(PropertyBinding)になにを指定すれば
よいのでしょうか?
103:デフォルトの名無しさん
07/03/09 00:39:28
>>29
読んでね。
104:デフォルトの名無しさん
07/03/09 18:44:43
前スレ埋まったのでage
105:デフォルトの名無しさん
07/03/09 19:40:36
↓同意。
1000 名前:デフォルトの名無しさん[sage] 投稿日:2007/03/09(金) 18:44:10
マ板でやれ
106:デフォルトの名無しさん
07/03/09 19:59:20
お客さんはこちらへ…
コーディングトラブルの約70%はif文などでの{}省略
スレリンク(tech板)
107:デフォルトの名無しさん
07/03/09 20:03:26
__________ __ ______ _____ ___ ___ ___
/ / / / | / /__ __/ [][] _| |_| |__ _| |_
/_______ /__/ /_ | ____/ / / | _ | |_ レ'~ ̄|
/ / /__ _/ / /____ | |___  ̄| | / / / /| |
/ / / | / __ / \__| | |  ̄ /_ / | |_
/ \ / / / | / | / / |_| |__| \/
.\ \/ / / / /|_| / /| | / /
\ / \// / / / \ V / We are The Real Programmers
\ \ / / / / / \ URLリンク(pc11.2ch.net)
\/ /_/ /_/ ∠_/\_\
108:デフォルトの名無しさん
07/03/09 23:22:24
マ板でやれというのももっともなので最後にしますが
>>前スレ997
おまえさん独善的杉。妄想力が豊かなのは結構だが、脳内ソースで人を非難するのはやめてね。
109:デフォルトの名無しさん
07/03/10 00:00:33
まだ春休みなのか・・・
110:デフォルトの名無しさん
07/03/10 16:42:48
C#で書かれたPNGもしくはJPEGのプログレッシブ表示に対応したコントロールありませんか?
あったら教えてください。
プログレッシブ表示のアルゴリズムを知りたいのですが。
111:デフォルトの名無しさん
07/03/10 16:48:11
それならC#である必要ないだろ
112:デフォルトの名無しさん
07/03/10 17:31:28
>>111
初心者なんで他の言語よめないんです。
113:デフォルトの名無しさん
07/03/10 17:36:34
Javaで書かれたのならあるだろ
ほとんどC#と変わらない
114:デフォルトの名無しさん
07/03/10 18:28:28
マ板とかム板とか!
どっちも同じプ板じゃないか!!
115:デフォルトの名無しさん
07/03/10 18:49:32
>>113
見つけられません
116:デフォルトの名無しさん
07/03/11 09:49:00
プロジェクトを新規作成するときに、「ソリューションのディレクトリを作成」にチェックを入れなかった場合、
あとから、「ソリューションのディレクトリを作成」にチェックを入れたのと同じ状態(フォルダ構成とか、
exeファイルの出力先とか)にするにはどうしたらよいでしょうか?
117:デフォルトの名無しさん
07/03/11 11:12:26
ディレクトリとソリューションファイルなどを再配置し、プロジェクト出力先を変更するだけじゃないのかな?
118:デフォルトの名無しさん
07/03/11 13:48:58
Hoge.slnファイルを削除してそのプロジェクトのフォルダを任意の位置に移動して
ほかのソリューションにHoge.csprojを追加するだけ
119:デフォルトの名無しさん
07/03/11 15:05:29
Bitmap bmp = (Bitmap)Clipboard.GateDataObject().GetData(typeof(System.Drawing.Bitmap));
dataGridView[col, row].Value = bmp;
↑こんな感じで、クリップボードから読み込んで、DataGridView 経由で
データベースに画像を登録しました。
CellToolTipTextNeeded を使って画像のバイト数と画像のサイズ(横ドットx縦ドット)を表示したいんですが、
画像のバイト数とサイズはどうやって取得すればいいんでしょうか?
120:デフォルトの名無しさん
07/03/11 15:15:45
>>119
1) bmp.Width * bmp.Height * Image.GetPixelFormatSize(bmp.PixelFormat) / 8 (ビットマップ部分の情報量)
ファイルに保存した場合の大きさが欲しければストリームにSaveして長さを見る。
2) Bitmap.Size or (Bitmap.Width, Bitmap.Height)
121:デフォルトの名無しさん
07/03/11 15:17:29
何かデータベースと関係があるのか?
Bitmap 型なら Width/Height と PixelFormat/GetPixelFormatSize 使えばいいだろ。
122:119
07/03/11 15:44:16
>>119 で書いた方法でデータベースに保存したのですが、
Bitmap bmp = dataGridView[col, row].Value as Bitmap;
としても、bmp が null になってしまいました。
そこで、Bitmap を取り出す方法はあきらめて、サイズの取得
方法を質問したわけですが、結局 Bitmap を取り出さなければ
いけないようです。
private void t_FILEDataGridView_CellToolTipTextNeeded(object sender, DataGridViewCellToolTipTextNeededEventArgs e)
{
if (e.ColumnIndex < 0 || e.RowIndex < 0) { return; }
DataGridViewImageCell cell = t_FILEDataGridView[e.ColumnIndex, e.RowIndex] as DataGridViewImageCell;
if (cell != null)
{
Bitmap bmp = t_FILEDataGridView[e.ColumnIndex, e.RowIndex].Value as Bitmap;
if (bmp != null)
「
123:119
07/03/11 15:46:35
すいません、編集中に誤って書き込んでしまいました。
コードは上記の通りなんですが、
bmp が null になってしまうんですが、なんで null に
なってしまうのでしょうか?
124:デフォルトの名無しさん
07/03/11 16:06:53
データベースには Bitmap 型なんて存在しないから。
直接画像ファイルのバイトイメージが入ってるんじゃなかったっけ。
125:デフォルトの名無しさん
07/03/11 16:39:54
MySQLだとblob型ってバイナリ格納用があるが
PHPでそこに入れる場合、mysql_real_escape_string()を
通さないといけないらしい
俺じゃ答えらんないから
そういうこともあるってことで参考までに
126:デフォルトの名無しさん
07/03/11 17:41:38
PHPのPDOでない関数は直接文字列としてクエリを送るからescapeする必要がある。BLOBでもTEXTでも。
しかしこの場合は自動でデータバインディングされるような。
127:119
07/03/11 18:22:20
データベースの環境書いてなかったですね。
SQL Server 2005 Express Edition で、Bitmap を保存している
フィールドは varbinary(MAX) です。
dataGridView[col, row].Value = bmp;
で保存して、grid 上は表示されているのに、
bmp = dataGridView[col, row].Value as Bitmap;
が null になってしまうのがなぜなんだろう~って感じです。
128:デフォルトの名無しさん
07/03/11 18:32:03
DataGridViewImageCell が頑張ってるからに決まってる
129:119
07/03/11 18:45:04
自己解決したのでご報告を。
byte[] bytes = dataGridView[col, row].Value as byte[];
とした後、 bytes から MemoryStream をつくって、
Bitmap.FromStream() としたら、読めました。
レスをくれた皆様、ありがとうございました。
130:デフォルトの名無しさん
07/03/11 20:42:45
>>119
”データベースに画像を保存”でググると簡単にその答えに辿り着くね
131:デフォルトの名無しさん
07/03/11 20:44:43
質問いいですか?
Doucuworksみたいな文書をMDIウインドウ内に表示って出来るんですかね?
2005EE Win2000です
132:デフォルトの名無しさん
07/03/11 20:45:15
>>131
Docuworksでした
133:デフォルトの名無しさん
07/03/11 21:45:38
OLEサーバとして公開されてればもしかしたら可能。
まあ、(おまえには)無理
134:102
07/03/11 22:58:11
どなたか、私にも愛の手を差し伸べてはいただけないでしょうか・・・orz
135:デフォルトの名無しさん
07/03/11 23:23:04
じゃあ愛の鞭な。
普通に@itのTIPSとかにあるとおりやるだけじゃん。
っていうか、Textってなんだよw
本屋に平積みされてる超初心者向けの入門書から勉強した方がいいと思うよ。
136:デフォルトの名無しさん
07/03/11 23:27:40
>>134
ComboBoxのSelectedIndexを格納する不可視のTextBoxなりなんなりを用意して
そっちでPropertyBindしたら?
まあ自前でxmlファイルに保存した方が簡単だと思うが
137:デフォルトの名無しさん
07/03/12 02:10:42
>>136
TextBox使うって、どっちみちコード書くならそのまま
SelectedIndexの読込/保存を書くほうがいいんじゃねーの?
138:137
07/03/12 02:17:28
すまん。
>>137 に言ってないで >>102 に言えよ俺。
ココ見てみ
URLリンク(www.atmarkit.co.jp)
139:デフォルトの名無しさん
07/03/12 12:12:42
現在.NET C#で開発しています。
cs側でSQL文を発行して取得したデータをaspx側で使用したいのですが、連携の仕方がわかりません。
具体的には、
----------------------------------------------------------------
*コンボボックス1,2,3使用
(1)SQL文実行(cs側)
(2)SQL文で取得したデータをjavascript(aspx側)で使用するために値引渡し
(3)コンボボックスにバインド(コンボボックス1のみ)
(4)コンボボックス1で選択した値により、コンボボックス2の内容をjavascriptで動的に変更
----------------------------------------------------------------
といったことがやりたいのです。
ちなみにコンボボックスの内容を変更する際にpostbackしたくないので、fristload時にコンボボックス1,2,3に表示する予定のデータを一度に全て取得したいと考えています。
コンボボックスの内容を動的に変更するにはデータが入った変数が必要だと考えているのですが、javascriptで宣言した変数にどうやってcs側からデータを格納すればいいのか、といったことがわかりません。
初歩的な質問で申し訳ないのですが、
ご助言お願いします。
140:デフォルトの名無しさん
07/03/12 12:18:49
配列を返す、読み取り専用のプロパティを定義したとします。
読み取り専用にしても、配列の各要素は自由に書き換えできてしまいますよね。
この場合、配列の各要素の書き換えを禁じる方法はあるのでしょうか?
141:デフォルトの名無しさん
07/03/12 12:22:53
コード書いて試せば一番早いことはわかってるんですが質問させてください。すいません。
継承についてですが
1、継承は基本クラスのメンバのコードを、内部的に派生クラスへコピぺする機能である。
2、自動で基本クラスのインスタンスが作られ、それを利用できる機能である。
(new一回につき基本と派生で一個ずつ、インスタンスが二つできる)
のどちらなんでしょうか?
また、
1、の場合
・privateメンバは継承されない
・protectedメンバは継承され、privateのように振舞う。
2、の場合
・privateはprivate。アクセスできるわけないじゃないか。
・protectedメンバは派生クラスからはアクセスしていいぜ。
ってことであってるんでしょうか?
142:デフォルトの名無しさん
07/03/12 12:29:49
>>141
1か2かで言ったら1。new一回につきインスタンスがいくつもできたんじゃたまらん。
で、privateは基本クラスのみから、protectedは基本クラスと派生クラスの両方からアクセスできる。
143:デフォルトの名無しさん
07/03/12 12:31:02
>>140
ないんじゃね?
そのプロパティで配列のコピーを返すようにすれば
書き換えはできるがもとには反映しなくなるけど
144:デフォルトの名無しさん
07/03/12 12:33:25
>>140
配列帰す限りはムリだと思う。
getインデクサでも定義して要素だけ返せば?
145:デフォルトの名無しさん
07/03/12 12:33:57
>>140
それか、そのプロパティを読み取り専用のインデクサにしてみることを検討
146:デフォルトの名無しさん
07/03/12 12:35:51
>>140
クローンを渡せばいいじゃん。
147:デフォルトの名無しさん
07/03/12 12:44:31
>>140
いっそプログラムやめちまえばいいんじゃね?
148:デフォルトの名無しさん
07/03/12 13:08:15
2.0ならクライアントポストバックを使う。
149:デフォルトの名無しさん
07/03/12 13:15:41
>>142
すばやい返答ありがとうございます。
privateメンバは引き継がれて存在するのに派生クラスでは使えない。
基本クラスでprotectedだったメンバは、なぜか基本クラスから派生クラスのメンバへアクセスできる。
ってことですね
150:デフォルトの名無しさん
07/03/12 13:33:55
うんにゃ、基底クラスから派生クラスのメンバにはアクセスできない。
なぜなら、基底クラスは派生クラスのことを何も知らないから。派生クラスは自分の基底クラスをはっきり知ってるけどね。
151:デフォルトの名無しさん
07/03/12 13:46:31
描画がちらつくので、既定のダブルバッファというのを試してみたんです。
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
↑
このコードを追加するか、またはDoubuleBufferedプロパティをtrueにするとあったので、
両方試したのですが、ArgumentException(使用されたパラメータが有効ではありません)
という例外エラーが出て、実行できません。
プログラム中で、Graphics g=this.CreateGraphics();というふうにしてるのがまずいのでしょうか
152:デフォルトの名無しさん
07/03/12 13:52:40
>>140
IList<T>を返すようにしてReadonlyなリストを返せばいい
153:151
07/03/12 14:51:33
原因は、ペイントハンドラで描画後にg.Dispose()を呼んでいたことでした
154:デフォルトの名無しさん
07/03/12 17:59:22
>>150
そういわれれば当たり前ですね、だめだ頭回ってないなー自分
ありがとうございましたー
155:デフォルトの名無しさん
07/03/12 18:57:13
>>140
てっとり早くIEnumerable<T>型として返すのもあり
156:デフォルトの名無しさん
07/03/12 21:47:53
>>139
逆じゃないの?
aspxでSQL引っ張るんじゃないの?
157:デフォルトの名無しさん
07/03/12 23:42:06
いろんな数値型に対応したいとおもい、引数および戻り値をオブジェクト型にした計算関数を作成するとした場合
(引数a,bおよび戻り値の3つのデータ型は同じデータ型であるという前提です。)
object Calc(object a, object b)
{
if(a is byte) return (byte)a + (byte)b;
if(a is int) return (int)a + (int)b;
if(a is long) return (long)a + (long)b;
(以下数値型のデータ型分続く)
・・・
・・・
}
といった感じで今は数値型(+や-の演算子が使える型)の全データ型分を書いています。
このように全データ型分書かなくても同様のことが行えるいい方法があればご教授願えませんか?
158:デフォルトの名無しさん
07/03/12 23:46:10
基本的には無理
それよりobject型はまずいだろ
型ごとに個別に処理書いてるんならなんでオーバーロードしない
159:デフォルトの名無しさん
07/03/12 23:48:01
>>157
汚い技を使わない限り無理。
素直にオーバーロードしとけ
160:デフォルトの名無しさん
07/03/12 23:48:37
演算子が入ってくるとどうしようもない
あと、面倒なのは分かるが引数の型ごとにオーバーロードにした方が良いな
それから、byte 同士の加算の結果がどうなるか把握してる?
161:デフォルトの名無しさん
07/03/12 23:55:04
メソッドに属性付けといてVisualStudioのマクロ機能を使って自動生成するとか
162:157
07/03/13 00:04:46
了解です。
演算子が入ると無理なんですね。
皆さんレスありがとうございました。
この関数を呼び出す前のaとbに渡されるものがすでにDLL化された関数が出力するデータでそれがobject型となっているからです。
オーバーロードというのも考えたのですが、そうなると呼び出し側で型判定し、データ型分の関数を用意することになってしまうので
簡潔に書きたかったからこのようにしました。
>>160
byte同士の加算結果はオーバーフロー発生の場合は255を返す処理にしています。
(そのほかの型でもオーバーフローが発生したらMaxValueを返すようにしています。)
163:デフォルトの名無しさん
07/03/13 00:11:22
>>162
try { return (byte)a + (byte)b; }
catch (OverflowException ex) { return byte.MaxValue; }
みたいなコードだったりしないよな?
いや、分かってるなら良いんだけど。
ちなみに、上記の演算は決して例外が発生しない。
164:157
07/03/13 00:23:33
はい、例外が発生しませんので、
return ((byte)a + (byte)b > byte.MaxValue ? byte.MaxValue : (byte)a + (byte)b);
と書いています。
165:デフォルトの名無しさん
07/03/13 00:42:15
コンパイラオプションで例外出せたような
166:デフォルトの名無しさん
07/03/13 00:47:46
ユーザに対して数値しか入力をさせたくない場合に
例えばユーザが下記ユーザID入力項目にアルファベットの
Aを入力した場合に、KeyCodeが1から9の範囲に無いので
入力を破棄するにはどうすれば良いでしょうか?
ユーザID □□□□□
※入力値チェックをするのではなくそもそも最初から数字以外を入力不可に
したいです。
ご存知の方がいらしましたら教えて下さい。
167:デフォルトの名無しさん
07/03/13 00:54:12
textBox.KeyPress += delegate(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar < '1' || e.KeyChar > '9') && e.KeyChar != (char)Keys.Back)
e.Handled = true;
}
168:166
07/03/13 01:13:49
>>167さん
ありがとうございます!!
169:デフォルトの名無しさん
07/03/13 01:38:01
コピペされるとマズい気が。
170:デフォルトの名無しさん
07/03/13 09:46:34
textbox numeric でググるくらいのことはしろよ。
171:デフォルトの名無しさん
07/03/13 10:44:47
>>166
GetWindowLong/SetWindowLongとES_NUMBERで実現できます。
ちなみにXPで実行するとバルーンチップも出てきます。
>>88 亀ですが
VBではSubやFunctionやPropertyの正式な呼び名はプロシージャです。これは
Quick BASICの頃からそうです。
ただほとんどの人はサブルーチンとか関数とか呼んでる気がします。
172:デフォルトの名無しさん
07/03/13 11:14:30
MaskedTextBox使わんの?
2002/2003?
173:デフォルトの名無しさん
07/03/13 12:02:43
ワイルドカードを含んだパス(たとえば"C:\hoge\*.txt"とか)に該当するファイルを列挙する方法はあるんでしょうか。
174:デフォルトの名無しさん
07/03/13 12:19:49
System.IO.Directory.GetFiles