5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

ふらっとC#,C♯,C#(初心者用) Part74

1 :デフォルトの名無しさん:2011/04/30(土) 19:56:45.96
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっとC#,C♯,C#(初心者用) Part73
http://hibari.2ch.net/test/read.cgi/tech/1302422250/

■関連スレ
C#, C♯, C#相談室 Part66
http://hibari.2ch.net/test/read.cgi/tech/1303889653/
ミスターサタンのC#相談室 
http://hibari.2ch.net/test/read.cgi/tech/1092656075/
VB.NET質問スレ(Part36)
http://hibari.2ch.net/test/read.cgi/tech/1301828549/
くだすれC++/CLI(初心者用)part2
http://hibari.2ch.net/test/read.cgi/tech/1268613679/

370 :デフォルトの名無しさん:2011/05/15(日) 21:15:08.95
DBいじらん人には3値論理とか知らないもんなのかね

371 :デフォルトの名無しさん:2011/05/15(日) 22:35:50.86
Textbox のキーイベントで、
Control + Backspace が押されたときに、
テキストボックスを全消去するメソッドを作成しました。
それ自体はうまく動いているのですが、
「Control + backspace」という組み合わせを押した際に、
テキストボックス上に変な文字が一文字追加されます。
webブラウザに貼りつけてみたところ、文字化けしていました。

連続して Control + backspace を押しても、
一つしか表示されないため、おそらく全消去後に追加された文字だと思います。
どのようにして、これの表示をなくすことができますでしょうか。


372 :デフォルトの名無しさん:2011/05/15(日) 22:45:01.99
キーイベントって三つもあるんだが
KeyDownでSuppressKeyPress使えば文字入力をキャンセルできるよ

373 :デフォルトの名無しさん:2011/05/15(日) 22:46:45.56
ウォッチ式で「TextBox.Text[0]」等を見ればその文字の文字コードが分かるはず
あとはTextChangedイベントとかハンドルしてデバッグすれば?

374 :デフォルトの名無しさん:2011/05/15(日) 22:54:55.14
>>372,373
ああ、すいません。KeyDown です。

なるほど。
とりあえず、それらを試してみます。非常に助かりました。
ありがとうございます。

375 :デフォルトの名無しさん:2011/05/15(日) 23:26:07.32
>>368-369
ありがとうございます
ようやく理解しました

376 :デフォルトの名無しさん:2011/05/15(日) 23:27:43.01
>>370
たしか理論値で e = 2.71828.... あたりがベストなんだとか。

377 :デフォルトの名無しさん:2011/05/15(日) 23:41:13.08
>>361
時期バージョン(今はまだCTP)には IProgress<T> インターフェイスが入る。
↓みたいなの作って、イベント登録した上でTaskに渡しておく。

interface IProgress<T> { void Report(T value); }
class Progress<T> : IProgress<T>
{
public EventHandler<T> ProgressChanged;
protected virtual OnReport(T value){}
void IProgress<T>.Report(T value){}
}

378 :デフォルトの名無しさん:2011/05/15(日) 23:50:13.70
374です。解決しました。ありがとうございます。

あと、dllで利用している関数で、ファイルの先頭ポインタを受け取るものがあります。
仮に、
void cFunction(void* pointer);
とします。
これを、C#で
extern static void cFunction(IntPtr p);
として定義した場合、
C#のpに、ファイルのポインタを与えるにはどのようにすればよいでしょうか?

379 :デフォルトの名無しさん:2011/05/16(月) 00:00:41.77
それファイルのポインタじゃなくてファイルからメモリ上に読み込んだ領域のポインタじゃないのか?
Cでどうやって使うのか教えてくれ

380 :デフォルトの名無しさん:2011/05/16(月) 00:01:08.01
ファイルの先頭ポインタ? ハンドルじゃなくて? 実はFILE*だったりしない?
MemoryMappedViewStream.PositionPointer使うのが一番楽かね .NET 4以降だけど

381 :デフォルトの名無しさん:2011/05/16(月) 00:04:59.41
>>379,380
えーっと、Cのマニュアルには
void *p = file_load(" this is path ");
someFunction(...., p);
と書いてありますね。
関係ないとこは省略したりしましたが。

382 :デフォルトの名無しさん:2011/05/16(月) 00:07:31.01
ならそのfile_load関数とやらを呼び出した返値を渡せばいいじゃん

383 :デフォルトの名無しさん:2011/05/16(月) 00:08:21.69
標準ライブラリの関数じゃないからわからん
file_loadはどっから出てきた?

384 :デフォルトの名無しさん:2011/05/16(月) 00:10:54.85
>>382
その場合は、
そのfile_load関数をラップするC/C++の関数を作成し、それをdllなどとする。
それをC#で利用する。
という手順となりますか?
申し訳ないです。初歩的な質問で。

385 :デフォルトの名無しさん:2011/05/16(月) 00:12:25.12
file_load内でメモリ上に読んでしまって配列のポインタを返してるような気はするが、
file_loadのドキュメントを見ない限りはわからん
なんか変なライブラリ使ってるんだろ? それを教えなさい

386 :デフォルトの名無しさん:2011/05/16(月) 00:16:02.70
>>383
ああ、たしかに。こんな関数見たことないですね。
。。。
下に定義ありました。申し訳ないw
void * file_load(const char * file, int * psize) {
FILE *fp; char *data;
struct _stat st;
*psize = 0;
if( _stat(file, &st)!=0) return NULL;
if((data=(char *)malloc(st.st_size))==NULL){ fprintf(stderr,"can not alloc memory(file_load)¥n"); return NULL;
}
if((fp=fopen(file,"rb"))==NULL) { free(data);
perror(file); return NULL;
} if(fread(data, 1, st.st_size, fp)<(unsigned)st.st_size) {
fprintf(stderr,"can not read data (file_load)¥n"); free(data); fclose(fp); return NULL;
} fclose(fp); *psize = st.st_size; return data;
}
ベタ張りで申し訳ないです。
読み込んだ「データ」を返してますね。


387 :デフォルトの名無しさん:2011/05/16(月) 00:20:39.93
>>385
AquesTalk2というライブラリを使っています。

388 :デフォルトの名無しさん:2011/05/16(月) 00:22:01.30
>>386
そういうことならたぶんこれでいける
byte[] data = File.ReadAllBytes("this is path");
fixed (byte* p = &data) { cFunction((IntPtr)p); }
ただしcFunctionから戻った後も渡したポインタが使用される可能性がある場合は
GCHandleを割り当てる必要があるのでこれじゃダメ

389 :デフォルトの名無しさん:2011/05/16(月) 00:23:42.74
ようは、cのchar配列に値をいれて返しているみたいなんで、
C#で file read -> byte[] に格納
Intptr に先頭アドレスをいれる。(キャストだけでおk?)
それを、目的の関数にいれてやる

という流れでいけそうだなと、素人ながらに思いましたw

390 :デフォルトの名無しさん:2011/05/16(月) 00:26:44.48
>>388
なるほど。参考になります。
再利用は「それほど大きいファイル」じゃないので、必要ないかと思いますが、
せっかくですので、勉強がてら GCHandle というやつを追加してみます。

また分からなければ、明日の夜に来ます。
ありがとうございました。

391 :388:2011/05/16(月) 00:31:35.38
ちょっと間違えた。&はいらん。
AquesTalkのマニュアルを見てみたが、非同期再生を行う関数を使う場合はたぶん>>388ではダメ。
ファイルの大きさとかいう問題じゃなくて、GCによって移動されてポインタが無効になるのでぶっ壊れる。
勝手に移動されないようにするにはGCHandle.AllocでGCHandleType.PinnedなGCハンドルを割り当てる。

392 :デフォルトの名無しさん:2011/05/16(月) 00:38:12.92
>>391
了解です。
「ファイルの大きさが小さい」というのは、毎回ファイルを読み込んでも、
特に問題ないという意味ですw
うーん、Cについて勉強しなおしたほうがよさそうですねw

本当に助かりました。明日、仕事があるのでこのへんで失礼します。

393 :デフォルトの名無しさん:2011/05/16(月) 08:30:05.45
fixed (byte* p = data) {
//このブロック内でのみpは有効
非同期再生((IntPtr)p);
}
GCはメモリ上のオブジェクトを勝手に移動させることがある。
fixedブロックを抜けた時点で再生は続いているためpは再生が終わるまで
dataを指し続けなければいけないが、それは保障されないので、
GCによってdataの移動が行われた時点でまだ再生が続いていたら死亡。

394 :デフォルトの名無しさん:2011/05/16(月) 09:20:01.87
AUTO

395 :デフォルトの名無しさん:2011/05/16(月) 22:16:53.61
WindowsサービスをReleaseでビルドしてインストールしようとしたら、

「コマンドラインやデバッガからWindows サービスを開始できません。
 最初にinstallutil.exeを実行して Windowsサービスを新ストールし、
 ServerExplorer、Windows Services Administarative ツール、
 またはNETSTARTコマンドを使用してください。」

というWindowsサービス開始エラーが出ます。
Debugの時には起きなかったし、VisualStudio2008のWindowsサービステンプレートに
何も書き加えない状態ではReleaseでも正常にインストール出来るみたいなんですが、
インストーラの設定などに不備があると考えられるのでしょうか?

396 :デフォルトの名無しさん:2011/05/16(月) 22:45:11.76
>>395
まだ、win32api + C の世界なんじゃないかなと想像してみる。

397 :デフォルトの名無しさん:2011/05/16(月) 23:10:19.27
392です。昨日の問題が解決しました。
結局、unsafe は使いたくなかったので、

クラスフィールドとして、
private static byte[] b = null;
private static IntPtr ptr;
を用意し、

メソッド内にて、
public static byte[] method(){
if(b == null){
b = File.ReadAllBytes("path to file");
ptr = Marshal.AllocHGlobal(b.Length);
Marshal.Copy(b, 0, ptr, b.Length);
}
...
int size = 0;
IntPtr ptr2 = SomeMethod(..., ref size, ptr);
return getByteArray(ptr2, size);
}
のような形で使っています。
これなら開放されないと思っています。。。(たぶん。)

398 :デフォルトの名無しさん:2011/05/16(月) 23:55:02.02
DataGridViewについて質問です。
列の幅を変えるのに列の端をマウスでドラッグできますが、ドラッグがDataGridViewの端で止まってしまいます。
ListViewみたいにListViewの大きさを超えても、ぐいーっと伸ばして列幅を変更するやり方はありませんか。

399 :デフォルトの名無しさん:2011/05/17(火) 00:08:00.85
ListViewだってデフォではそんな動作しないんじゃない?
あれはダミーの列を一番右に入れてやるんじゃなかったかな。
DataGridViewだって同じやり方が有効では?いや知らんけど

400 :デフォルトの名無しさん:2011/05/17(火) 00:27:39.98
今UserControlを継承したコントロールを作成しています。


[DefaultValue("Text")]
[Browsable(true)]
public override string Text
{
set
{
_text = value;
Invalidate();
}
get { return _text; }
}

上記のように書いているのですが、コントロールを追加したときのTextがコントロール名になってしまいます。
初期値をDefaultValueで指定した値にするにはどうしたらいいでしょうか?

401 :デフォルトの名無しさん:2011/05/17(火) 00:33:38.27
メモ

DefaultValueAttribute は、属性の値でメンバーを自動的に初期化させることはありません。 コード内で初期値を設定する必要があります。

402 :デフォルトの名無しさん:2011/05/17(火) 00:35:57.48
DefaultValueはデザイナが値を設定するコードを生成するかどうか判断するためだけにある
実際の動作には全く関係ない

403 :デフォルトの名無しさん:2011/05/17(火) 00:42:31.40
>>348-351
返事が遅くなりました。
IDSharpの元ソースを見つけて修正することができました。
ご指摘どおり仕様でShift-JISはISO8859-1で読むことになっていたため
(Unicodeは判別して別の処理に振り分ける仕様になってました。)
生データでShift-JISかどうかの判定式を持って振り分けることにしました。
順調に表示されています。ありがとうございました。

404 :デフォルトの名無しさん:2011/05/17(火) 00:44:08.03
Dropboxの設定画面のようなタブUIを実装しようとすると、
TabControlのDrawModeプロパティをTabDrawMode.OwnerDrawFixedにして、
描画を実装すれば実現できるのでしょうか?

似たようなUIでサンプルコードなどがあれば教えてもらえると助かります。

405 :デフォルトの名無しさん:2011/05/17(火) 00:45:48.86
>>400
確か、
(1) コンストラクタか何かでプロパティをデフォ値で初期化
(2) デザインモード時のみ、プロパティのセッタが最初に呼び出された時、
valueが"ControlName*"だったら無視する。

ぐらいしか手が無かったような。
何かもっといい方法あったっけな

406 :デフォルトの名無しさん:2011/05/17(火) 02:40:57.24
あにょ〜

407 :デフォルトの名無しさん:2011/05/17(火) 06:36:52.97
WindowsFormのTextBoxで、入力中で未確定の日本語をKeyDownなどのイベントで取得する方法はありますでしょうか
KeyPressイベントは日本語入力中は発生しないようで、
KeyDownイベントでe.KeyCode、e.KeyData、e.KeyValueを調べてみましたが、
入力された文字列を取得することはできないようでした

408 :デフォルトの名無しさん:2011/05/17(火) 06:39:23.73
>>407
日本語入力中はtextbox上でやってるように見えるけど
あれはIMEの制御下

textboxだとIME関連のメソッドとかなかったっけ?

409 :デフォルトの名無しさん:2011/05/17(火) 07:19:17.21
>>408
ありがとうございます
大変そうな予感がするのでやらないことにします

410 :デフォルトの名無しさん:2011/05/17(火) 08:39:33.97
コンボボックスが2つあるユーザコントロールをフォームに配置して、
フォームのデザイナからコンボボックスのDataSourceなどのプロパティを設定したい場合、
ユーザコントロールにそれ用のプロパティを設定しないといけないのでしょうか?

411 :デフォルトの名無しさん:2011/05/17(火) 09:17:35.93
書いてる途中でどっちの問題なのかと思い当たってしまった

・コンボボックスのデータソースプロパティが見えない
・スマートタグを出したい

上ならプロパティ付け加えて見えるようにするしかないすよ

412 :デフォルトの名無しさん:2011/05/17(火) 09:36:55.11
>>411
ありがとうございます、上です(スマートタグって何でしょう)
プロパティ自分で追加したらフォームのデザイナから設定できるようになりました

また、ユーザコントロールのSizeを設定したらコンボボックスのSizeも同じ値にしたいので、
Sizeプロパティを次のように書いたらVisualStudioが落ちちゃいました
名前が色々被ってるので怪しいとは思ったんですが、Sizeプロパティを変更したい場合はどのように記述すればよいでしょうか

public System.Drawing.Size Size
{
get
{
return this.Size;
}
set
{
this.Size = value;
this.comboBox1.Size = value;
}
}

413 :デフォルトの名無しさん:2011/05/17(火) 10:16:14.78
Dock=Fillでええんちゃうんかと

414 :デフォルトの名無しさん:2011/05/17(火) 10:19:52.06
>>413
Dockが使えない状況なんです。

415 :412:2011/05/17(火) 10:30:03.51
>>413
>>414>>412ではないですが、Dockだとダメなんです
目的はFixedSingleの枠線のあるComboBoxで(他にもありますが)、
UserControlのBorderStyleをFixedSingleにして、
ComboBoxのLocationを-1, -1、SizeをUserControlと同じにすると見た目がそれっぽくなります
DockをFillにしてしまうとLocationがずれてしまうので、ちゃんとSizeを設定できるやり方はないかなと

UserControlのResizeやSizeChangedイベントで設定できますが、出来ればSizeプロパティのoverrideの仕方が分かればありがたいです

416 :412 ◆Sf4YYPJJPE :2011/05/17(火) 10:38:04.20
トリ付けました。>>415は私ではないです。
Dockだと望んだ動作をしない上、VisualStudioがエラーを出します。

417 :デフォルトの名無しさん:2011/05/17(火) 11:07:25.50
2人が似たようなことを聞いてるのか?w

418 :デフォルトの名無しさん:2011/05/17(火) 12:13:58.80
virtualでないプロパティがoverrideできたら欠陥じゃねえか

419 :デフォルトの名無しさん:2011/05/17(火) 12:55:16.40
OnSizeChangedをオーバーライドする

420 :デフォルトの名無しさん:2011/05/17(火) 12:58:59.03
コンボボックスの高さはフォントサイズで決まって変更不可だったと思った
幅だけは変えられたが

421 :412:2011/05/17(火) 13:31:27.07
>>418 そうですか?
>>419 それでも出来ますが、今はSizeのsetをどうやったら変更できるか知りたいです
>>420 幅さえ変えられれば無問題です

422 :デフォルトの名無しさん:2011/05/17(火) 14:14:36.09
>>421
それならSizeじゃなくてWidth変更だな

423 :412:2011/05/18(水) 00:23:11.83
解決しました。
みなさんありがとうございました。

424 :デフォルトの名無しさん:2011/05/18(水) 00:28:55.27
C++ みたいに const int a = hoge.aho();
とかローカル変数に対して不偏であることを設定することはできないのですか?


425 :デフォルトの名無しさん:2011/05/18(水) 00:41:03.56
できますよ。

426 :デフォルトの名無しさん:2011/05/18(水) 01:01:20.38
>>425
どんな構文ですか?

427 :デフォルトの名無しさん:2011/05/18(水) 01:08:09.26
>>426
const int a = hoge.aho();

428 :デフォルトの名無しさん:2011/05/18(水) 01:10:46.01
constはコンパイル時に解決されるんじゃなかったっけ。
readonlyはだめ?

429 :デフォルトの名無しさん:2011/05/18(水) 01:11:46.66
出来ないよ。

>>424
参照型持ってる言語で、ローカル変数の不変性保証って難しいのよ。
let x = new Class();
x = anotherInstance; // これを不可にするのは簡単
x.Property = 1; // これを不可にしたければ、Classの方を不変に作らないと無理。

430 :デフォルトの名無しさん:2011/05/18(水) 01:13:00.04
>>428
そう、const付けれるのはコンパイル時に解決できる数値と文字列に限られる。
readonlyはローカル変数には付けれない。

431 :424:2011/05/18(水) 01:19:14.65
なるほど、どうもでした

432 :424:2011/05/18(水) 01:22:50.01
ちょっと馬鹿なふりして聞けばお前らが答えてくれるので助かります

433 :デフォルトの名無しさん:2011/05/18(水) 01:47:25.90
ここってID出せるんだっけ?

434 :デフォルトの名無しさん:2011/05/18(水) 01:50:40.29
そういうわざとらしいレスはいらないです

435 :デフォルトの名無しさん:2011/05/18(水) 02:06:35.31
クラスの命名に無駄に悩んでしまう。
どーせ自分しか使わないからどんなでもいいんだけど。
他人の書いたコード読んで命名センスを磨くのは大事だと思った。寝る。

436 :デフォルトの名無しさん:2011/05/18(水) 10:35:49.51
>>435

クラス名・変数名に迷ったら書き込むスレ。Part19
http://hibari.2ch.net/test/read.cgi/tech/1293201229/


437 :デフォルトの名無しさん:2011/05/18(水) 13:51:01.01
質問があります.
DataGridViewTextBoxCellを継承してテキストとアイコンを描画できるセルを作りたいと考えています.
現地点ではDataGridViewTextBoxCellのPaintをオーバライドして,テキストとアイコンを表示できるようにしました.
ところでDataGridViewはヘッダの境界をダブルクリックすると自動的に最適なカラム幅に変更する機能があります.
今の自分のプログラムでへッダの境界をダブルクリックすると,テキストのみ表示した場合の最適なカラム幅に調整されます.
最適なカラム幅を自分で設定したいのですが,どのメソッドをオーバライドすればよいのでしょうか?

438 :デフォルトの名無しさん:2011/05/18(水) 14:17:51.44
直観で答えるとGetPreferredSize

439 : ◆lSltfXLZHI :2011/05/18(水) 15:41:15.90
DataGridViewのセルの入力内容を自動でチェックさせないようにすることは可能でしょうか?

データソースに型付きデータセットのテーブルを設定しているのですが、
デフォルトの状態ではセルに入力をして次のセルに移動しようとすると自動で入力チェックが実行され、
エラーだとセル移動できず、入力を訂正しないとフォームを閉じることすら出来ないようでした。
DataGridView.DataErrorイベントをハンドルして、DataGridViewDataErrorEventArgsのCancelをfalseにすると、
フォーカスは移動できるけど入力内容は元に戻る、と言う感じで、また一から入力し直す必要があり煩雑です。

自動でチェックを行わせないようにして、登録ボタンクリック時に一括でチェックをする
もしくは
自動でチェックし、エラーならセル移動はできないが、フォームは閉じれる
という方法がお分かりであれば教えて頂きたいと思います。
よろしくお願いします。

440 :デフォルトの名無しさん:2011/05/18(水) 16:21:46.96
想像するにDataErrorイベント捕捉してスルーしちゃえばいいんじゃないかな?


441 : ◆lSltfXLZHI :2011/05/18(水) 16:38:16.55
>>440
DataErrorイベントハンドラを追加して、そのメソッドに何も書かなかった場合は、
やはりセル移動できず、フォームを閉じることもできない状態でした

DataSet.EnforceConstraintsをfalseにするとか、DataTable.Row.BeginEdit()を呼び出すと入力チェックを抑制できる
という記事を見つけて試してみましたが、やはりダメでした

442 :デフォルトの名無しさん:2011/05/18(水) 22:24:15.98
>438
読み取り専用で,書き込めないです.

443 :デフォルトの名無しさん:2011/05/18(水) 22:44:00.01
メソッドなんだから読み取り専用もクソもない

444 :デフォルトの名無しさん:2011/05/19(木) 08:25:54.01
>443
プロパティです.
オーバライドもできません.

445 :デフォルトの名無しさん:2011/05/19(木) 09:35:00.95
こういうことじゃないの?
    class DataGridViewUnkoCell : DataGridViewTextBoxCell
    {
        protected override Size GetPreferredSize( Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex, Size constraintSize )
        {
            return base.GetPreferredSize( graphics, cellStyle, rowIndex, constraintSize );
        }
    }


446 :デフォルトの名無しさん:2011/05/19(木) 09:36:59.34
拡張しようとしたらそこは触れないようになってるとかよくあるよね…

447 :デフォルトの名無しさん:2011/05/19(木) 09:55:28.50
>445
DataGridViewTextBoxColumnの方なら,PrefferedSizeの設定ができました.
解決しました.ありがとうございました.

448 :デフォルトの名無しさん:2011/05/19(木) 11:37:33.73
ArrayList aryObj = new ArrayList();
Obj obj = new Obj();
aryObj.Add(obj);
ArraylistにObj型の変数を追加した後、
aryObj.Clear();
をしたらobjの中のデータもクリアされますか?

449 :デフォルトの名無しさん:2011/05/19(木) 11:41:23.94
aryObjはobjに対する参照を持ってるだけなのでobjの中身には関与しない。

450 :デフォルトの名無しさん:2011/05/19(木) 12:02:27.88
ってことは、objの中の片付けをしないまま、Arraylistから削除したらどこからも参照できなくなるんですか?


451 :デフォルトの名無しさん:2011/05/19(木) 12:08:53.75
繰り返すけどaryObjはobjの中身には関与しない。
他の変数やコレクションにも保持されてたら、たとえaryObjをClearしても、そこからアクセスできる。
どこからも参照されていないオブジェクトはいずれガーベジコレクションによって消去される。
そのオブジェクトの中身は関係ない。外側の問題。

452 :448:2011/05/19(木) 12:28:44.50
>>451
どこからもリンクされなくなったらどうなるか悩んでましたが、ようやく分かりました。
ありがとうございました。


453 :デフォルトの名無しさん:2011/05/19(木) 16:25:13.75
データベースエクスプローラでテーブル作る
DataGridViewでレコード追加
this.テーブル名TableAdapter.Update(this.dataSet1.テーブル名);
でデータベース更新
プログラム終了
プログラム再実行
DataGridViewにレコードは残っている(期待した動作)
プログラム終了
ここで「データベースエクスプローラで最新の状態に更新とかで接続する」
プログラム再実行
DataGridViewにレコードが1つも表示されない(なんで?)
データベースのレコードが消えてしまう
データベースエクスプローラでテーブルの構造はいじってないのに
接続しただけでデータベースが1から作り直されてしまうのでしょうか?

454 :デフォルトの名無しさん:2011/05/19(木) 21:21:00.25
凄く初心者っぽいことを聞きますが、別のネームスペースにあるクラスのメソッドから、フォーム内の、たとえば TextBox1.text の値を書き換えるにはどうすれば良いのでしょう?

455 :デフォルトの名無しさん:2011/05/19(木) 21:33:29.35
このFormのTextBox1のTextを書き換えてくださいと伝える

456 :デフォルトの名無しさん:2011/05/19(木) 21:46:26.11
>>455
無事に書き換えることが出来ました
ありがとうございました

457 :デフォルトの名無しさん:2011/05/19(木) 22:07:28.25
うそぉ?

458 :デフォルトの名無しさん:2011/05/19(木) 22:18:17.45
>>455
さんのアドバイス通りに、以下のコードを書き加えました

private void MainForm_Load(object sender, EventArgs e)
{
 form1.Form1Instance = this;
}

private static Form1 _form1Instance;

public static Form1 form1Instance
{
 set { _form1Instance = value; }
}

public string TextBox1Text
{
 set { TextBox1.Text = value; }
}

後は、別のクラスから

フォームのネームスペース.form1.Form1Instance.TextBox1Text = "コメント表示";

とすれば書き込みできました
まだ始めたばかりの僕でも >>455 さんの的確なアドバイスで簡単に実現できました

ありがとうございました

459 :デフォルトの名無しさん:2011/05/19(木) 22:35:32.34
糞コード誕生おめでとうございます

460 :デフォルトの名無しさん:2011/05/19(木) 22:38:24.08
何が悔しかったの?

461 :デフォルトの名無しさん:2011/05/19(木) 22:41:52.40
どうみても>>458は手練れのVB使いだろ


462 :デフォルトの名無しさん:2011/05/19(木) 22:49:30.80
staticっすか

463 :デフォルトの名無しさん:2011/05/20(金) 00:40:42.77
「もう、どうにでもなれ」の心境でスタティックなイベント実装したことがあるのは内緒だ

464 :デフォルトの名無しさん:2011/05/20(金) 00:49:23.11
外から見て自然に見えれば内側ぐちゃぐちゃでももう知らん!

465 :デフォルトの名無しさん:2011/05/20(金) 00:57:59.76
staticなイベントとかstaticなフォームに外からイベントハンドラ突っ込むとかって
メモリリークする最低のパターン

466 :デフォルトの名無しさん:2011/05/20(金) 00:59:28.87
ほんと?

467 :デフォルトの名無しさん:2011/05/20(金) 01:08:44.93
イベントの紐付けの解除漏れの問題はstaticとか何も関係ないなw
何が言いたいのか全然わからない

468 :デフォルトの名無しさん:2011/05/20(金) 01:12:46.30
ほね」。

469 :デフォルトの名無しさん:2011/05/20(金) 01:19:20.92
同じことアホみたいに何度もかいてりゃ嬉しくなれるんだから安いよな。

ほね」。

だって。本当に馬鹿だろお前。

214 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)