VC++6.0
ダイアログベースで作業しているのですが
data[i][j]に格納した値をすべてeditboxに表示させるには
どうしたらいいのでしょうか?
data[0][0]の表示はできてますか?
エディットボックスの文字列を代入するならSetDlgItemTextやらSetWindowTextで変更可能だから、
i, j の添え字が配列の領域確保数だと仮定した上で、
HWND hdlg; // ダイアログのウィンドウハンドル。事前に代入しておく
int ctrlID; // editbox のコントロールの識別子。事前に代入しておく
int tmp_i, tmp_j; // インデックス用
char tmp[256]; // 一時バッファー用。サイズは適当
char buf[1024]; // 出力用。サイズは適当
buf[0] = '\0';
for( tmp_i = 0; tmp_i < i; tmp_i++ ) {
for( tmp_j = 0; tmp_j < j; tmp_j++ ) {
sprintf(tmp, "%d", data[tmp_i][tmp_j]); /* 文字列にする, %d はdataの型にあわせること */
strcat(buf, tmp); /* 文字列を追加 */
strcat(buf, ", "); /* 一応区切り文字も表示してみる */
}
}
SetDlgItemText( hdlg /* ウィンドウハンドル */, ctrlID /* editbox のID */, (LPCTSTR)buf );
とかすればいいのでは?
double test = data[1][3];
m_sEdit.Format("%lf",test);
のように表示させているのですが、これを応用はできないのでしょうか?
SetDlgItemText( hdlg /* ウィンドウハンドル */, ctrlID /* editbox のID */, (LPCTSTR)buf );
部分を
m_sEdit.Format("%d",buf);
にしてみましたがだめでした。
MFCを使用しているのなら
こんな感じでどうかしら。
double test;
double data[2][2] = {{1.11111,2.22222},{3.33333,4.44444}};
CString string,show;
for(int i = 0;i<2;++i){
for(int j=0;j<2;++j){
test = data[i][j];
string.Format("%lf ",test);
show += string;
}
}
SetDlgItemText(IDC_EDIT1/*コントロールID*/,show);
> m_sEdit.Format("%d",buf);
m_sEdit.Format("%s",buf);
これでもだめ?
double test;
CString show;
CString ss;
for(int i=0; i<=200; ++i)
{
for(int j=0; j<=3; ++j)
{
test=data[i][j];
ss.Format("%lf",test);
show+=ss;
}
}
SetDlgItemText(IDC_EDIT1,show);
とやってみたのですが、何も起こりません。(ボタンを押してファイルを選んでもエディットボックスの中になにも表示されません)
ちなみに、dataの中にはファイルから読み込んだものがはいっていて、ひとつひとつの値は表示できます。どこが間違っているのでしょうか?
通りすがりさんのプログラムの最後の行を
m_sEdit.Format("%s",buf);
にしてみたら
for( tmp_i = 0; tmp_i < i; tmp_i++ ) {
の行に対して
warning C4700: 値が割り当てられていないローカルな変数 'i' に対して参照が行われました。
とのエラーがでました。
次に
temp_iにしている意味が私にはよく理解できなかったので
char tmp[256]; // 一時バッファー用。サイズは適当
char buf[1024]; // 出力用。サイズは適当
buf[0] = '\0';
for(int i = 0; i<=200 ; i++ ) {
for( int j= 0; j<=3 ; j++ ) {
sprintf(tmp, "%d", data[i][j]); /* 文字列にする, %d はdataの型にあわせること */
strcat(buf, tmp); /* 文字列を追加 */
strcat(buf, ", "); /* 一応区切り文字も表示してみる */
}
}
m_sEdit.Format("%s",buf);
としてみましたが、ボタンを押してファイル選択をすると、実行画面が、キャンセルボタンを押したようにきえてしまいます。
デバッグ時、for文の中の変数はどのようになっていましたか?
"ボタンを押した時の処理"の、
ソースを提示して貰えると何か分かるかもしれません。
void CDetafile6Dlg::OnButton1()
{
ifstream fin;
CFileDialog f(TRUE);
if(f.DoModal()==IDOK){
//ファイルを開く
fin.open(f.GetFileName());
if(fin.fail()){
AfxMessageBox("ファイルをオープン出来ません");
fin.close();
}
//ファイルを読んでエディットコントロールへ出力
string str;
double data[22000][4];
while (!fin.eof())
{
for(int k=0; k<9; k++)
{
getline(fin,str);
}
for(int j=0 ; j<=20000 ; j++)
{
for(int i=0 ; i<=3 ; i++)
{
fin>>data[j][i];
}
}
}
がソースです。このあとに先に述べたようなものをつけたしました。
fin.close();
UpdateData(FALSE);
もかいてあります
CString ss;
for(int i=0; i<12000; i++)
{
double test1=data[i][0];
double test2=data[i][1];
double test3=data[i][2];
double test4=data[i][
ss.Format("%1.2lf %1.2lf %1.2lf 1.2lf\r\n",test1,test2,test3,test
m_sEdit+=ss;
}
で出来ました。
ありがとうございました
ツイート | ![]() |