【2016年6月17日 16:59 の下書き放出】


char workB[10 + 1] = {"NNNNNNNNNN"};
char ans;

workBに格納した一つ一つの文字列をテキストボックスに格納していく処理。
なかなか厄介なsystem::String

最初、こうやってしまってた。
this->B_1->Text = workB[0].ToString();
this->B_2->Text = workB[1].ToString();
.
.
.

※workB[i]の中には半角英字がびっちり入っている。

職場の人に教えてもらったんだけれども
ToStringっつーのは、数値を数字に変換するときに使うやつらしく、
指定しているものがchar型だったとして、中身に文字が入っていたとしても
そいつの文字コードが数字に変換されて格納してしまうというオチだった。


へ~。
数値限定のやつなら文字が取得できなくて当然ですね。


次に、こうしてみる
this->B_1->Text = gcnew String(workB);

やりたいこととは違うとは思いながら、一応コンパイルが通ったので動確(開発現場用語:動作確認)する

this->B_1->Textの中にworkBの値がガッツリそのまま入っただけ。
違うの!
私がやりたいのはworkBの10コの値を全部違うテキストボックスに入れたいってことなの!


そして、たどり着いたのはこちら。(約2時間)


ans = workB[0];
this->B_1->Text = gcnew String(&ans);
ans = workB[1];
this->B_2->Text = gcnew String(&ans);
ans = workB[2];
this->B_3->Text = gcnew String(&ans);
.
.
.
.


美しくない。

分かっているけど、今の私にはこれ以上はできない。


gcnew Stringほげほげっていうのはどうやら引数のところにアドレスしか与えることができないらしく、
しょうがないので欲しい配列の中身をいったんchar型の(ここではans)に格納し、
そのアドレスを指してgcnew Stringでsystem::String型のテキストボックスの中に放り込む!!!!
ということで格納することができました。

テキストボックスは全部で10コあったので全然スマートじゃないけど
こんな感じのコードが20行追加されました

本当はループ処理で簡単にやりたかったけど、
system::Stringの中にcharを直接入れるとエラーになるものだから・・・


細かいところは分かっていない!
gcnewは解放しなくても自動で解放してくれるnewだと
どこかに書いてあったけど、この単語を除くと、

this->B_1->Text = String(&ans);

↑普通にコンパイルエラーになってしょぼぼーん。




あ~、難しい。



会社の先輩にVCが次の業務で要るんですって話したらちょっと驚かれた。
(VCまだ使ってんの?えーーー的な)

私だって正直C#の方が好みだよー
仕方ないじゃんよー。


後日、VCを10年ほど前にガッツリやっていた先輩社員に質問してみたところ、
テキストボックスsystem::stringという状態を変えないまま、
オブジェクト同士で処理ができるようにすればこういう苦労はないかもしれないということを教えていただいた。

例えば計算処理がガッツリ必要なプログラムとか、メモリの使用率についてシビアな制約があるシステムならば
そういうオブジェクト間で処理をするブロックと高速計算できるブロックというのを分けきることができれば、
コントロール(今回はテキストボックス)に戻す作業が簡単だったかもね。

ということでした。


先輩社員は客先に戻らないといけなかったので
コンパイルエラーは残ったままだったけど、
とりあえず動いているので課題は一応クリアしているの。


もっときれいなソースが書ければいいなーと思っていたけど
しかたない。





(省略)
}
if (flg !=0)
{
goto LOOPEND; //エラー発生時、以降の処理を抜ける
}
}
LOOPEND:
if (flg == 0)//正常処理
{
ans = ans + work[i];
}

}

これだとコンパイルエラーになる。

(省略)
}
if (flg !=0)
{
goto LOOPEND; //エラー発生時、以降の処理を抜ける
}
}
if (flg == 0)//正常処理
{
ans = ans + work[i];
}

LOOPEND:
}


続きに何も処理がないから?
ただ普通にループ抜けたいだけなのでそれでいいんだけどなー
どうせflgチェックのif分ではじくからいいけど、しょうがないので
ここでやらなくてもいい初期化をしている。。。



試しに何か入れてみたらコンパイルは通った。


}
if (flg !=0)
{
goto LOOPEND; //エラー発生時、以降の処理を抜ける
}
}
if (flg == 0)//正常処理
{
ans = ans + work[i];
}
LOOPEND:
ans ++;

}


ふ~~ん。
そういうもんかと納得することにした。
一応コンパイル通ったー。

bool wk[10] = {true} ;



http://d.hatena.ne.jp/melpon/20111114/1321297053


でも使ってもいいよっておっしゃる方もいる。

使ってもいいの?
使っちゃうよ?


error C3872: '0x3000': この文字を識別子で使用することはできません



引数渡して別関数に飛ばすところだけがことごとくエラーで怒られてたので
型とかを確認したり、とりあえず行ごとコメントアウトして絞り込んでいってみたけどよくわからなくて


ふと確認したら「;」の後ろに全角スペースがあってなーんだって感じで
コンパイルエラーは解消されました。


予約語使ってるわけでもなかったし、なんでかわからなかった。。。
sakuraちゃん使ってれば一発で気が付いたのにな。

仕事でプログラム書いているわけじゃないから
(次の業務でC++が必要なので、新人向けの課題で練習しています)
vcエディタに日本語もコードも切り替えながら直書きしてるから
知らん間に紛れてしまったっぽい。

最初に作った一文をコピペでバンバン量産してたせいで
同じコール部でエラーが出るもんだから
その呼び出し方がまずいのかと思ってしまったし。





全角スペースは入れない。
どの言語でもお約束。






wk[0] = int::TryParse(this->A_1->Text, workA[0]);
wk[1] = int::TryParse(this->A_2->Text, workA[1]);
wk[2] = int::TryParse(this->A_3->Text, workA[2]);
wk[3] = int::TryParse(this->A_4->Text, workA[3]);

TryParseっていうのでどうやら例外処理をこなしてくれるらしい。
this->A_1->Text, (←テキストボックスのテキスト)をworkA[0]に変換して格納しようとしたとき、
失敗していたらfalseが入る。

今回は一つでもfalseだったら途中でループを抜ける、とかしたかったので
wk配列はbool型にしてfor文の最後でまとめてチェックをするようにしていた。

ちなみに、テキストボックスが空欄だったり、空白文字が入っていたりすると
falseで戻ってくるので、今そこをどうやってチェック入れようか考え中。
エラーメッセージを出したあと、問題のテキストボックスの中身を反転表示させたい。


こうするとコンパイルは通る。
StartArea->SelectAll();

ならない。


自分自身のテキストボックスと指定。
this->StartArea->SelectAll();


ならない。

明示的にフォーカスを設定するとできるみたいよ、と
C#の掲示板で見たので試してみたらできました。

this->EndArea->Focus();
this->EndArea->SelectAll();


ここだけの関数作って呼ぶだけやった。
1>Step_101.obj : error LNK2028: 未解決のトークン (0A000042) "void __clrcall Step_101::mesbox_name(void)" (?mesbox_name@Step_101@@$$FYMXXZ) が関数 "private: void __clrcall Step_101::Form1::checkButton_Click(class System::Object ^,class System::EventArgs ^)" (?checkButton_Click@Form1@Step_101@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) で参照されました。



・・・何ば言いよっとね。
string型の引数が原因だったとネットに書いてある。

System::String::Empty
これ自体は空の文字列を指しているとのこと。
ふむ。

if(this->name2_textBox->Text == System::String::Empty)

もしかしてこれはダメなのか。
空文字をテキストボックスに突っ込むときはこれでできたからいいのかと思ったけど。。
定数な扱いじゃないのかな。


if (String::IsNullOrEmpty(s))
というめそっどがあるってか。
へー。



result = s == nullptr || s == String::Empty;


これと同じ意味だと。
ふむふむ。


if (String::IsNullOrEmpty(this->name2_textBox->Text))


ならない。
ガッツリコメントアウトしたら消えたので、関数自体の引数が悪いとかじゃない。
それで、絞っていくとmesbox_name()っていう関数が悪さしてるっぽいの?


ひとつ前の課題プログラムと比較しながら最初から眺めてみる。


----------------------------------------------------------

#include
#include


namespace Step_101 {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

//プロトタイプ宣言
void clear();
int numcheck(int k_start,int k_end);

void mesbox_birth();
void mesbox_name();



----------------------------------------------------------
なんと、こーしたらエラー消えた。

----------------------------------------------------------
#include
#include


//プロトタイプ宣言
void clear();
int numcheck(int k_start,int k_end);

void mesbox_birth();
void mesbox_name();

namespace Step_101 {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

----------------------------------------------------------


なんてオチ。

if(this->name2_textBox->Text == System::String::Empty)

間違いだと思ってたこの条件文も復活させたら普通にビルドできちゃった。

来年あたり笑い話ですな。
お花見で食べたいもの【投稿でドットマネーがもらえる!】ブログネタ:お花見で食べたいもの【投稿でドットマネーがもらえる!】 参加中



4/1に会社で入社式があって、その夜お花見があります。


昼から場所取りしにいくって言ってたけど、アホやなぁと思う…


お寿司盛りとか買うみたいですが、予約してないみたいだし…大丈夫だろうか…

新人歓迎会兼ねてるんだよ…?
20人は来るんだよ…?
場所とれなかったらシャレになんねーよ?




お花見と言えば普通にお弁当がいいよねー。

おにぎりとー、からあげとー、ウインナーとー、卵焼き!


あとあったかいインスタントスープ欲しいですな。

お花見シーズンってまだ寒いので、あったかいお茶とか必須じゃないですか。
そうすると荷物増えるよね。

お茶と、お湯と、お酒と、お弁当!
あとはお菓子とか。


ちゃんと荷物分担したらいいけど、ひとりで準備するってなったら大変だよ。


でも、今お花見する人って結構コンビニで買い物していくのかな。
自分で作ってる人ってもうほとんどいなさそう。


小さい頃は母と時々手作りお弁当持って弾丸お花見してました。

楽しかったなぁー。

今年も行こうかなー。
ブログでドットマネーを稼ぐ

Amebaバレンタイン恋愛診断結果

恋愛診断結果



もうあげちゃったもーん。


マカロンは美味しい☺︎
私の彼氏は…
ポテチ系男子かな


カレドショコラ。

小腹が空いたらこれなら食べてもいいような気がしてます。


他にはドライフルーツとか、クルミとか。

最近お腹周りがヤバくて、残業が長引く時のお供はお菓子を食べないように気をつけてます。

どうしてもお菓子が食べたいときだけ、コレ。



パッケージが可愛くなった特別仕様でした。
シンボロンコラボ。

前もこのイラストレーターさんがデザインされたパッケージがありました。


今回は飾り英文字デザインですって。



うーん。




メッセージを作れますって書いてあるけど、

C
I
♥︎
U
H
S
K


箱に入ってたこれで何を作れと…?

三列とも同じ文字だったので、
見本の
I♥︎U


か、

I♥︎UK


くらいしか出来ない(笑)



私のイニシャル(Y)入ってなかったしー。
Yがあったら文字数的にも作れたのになー。


みなさんは何を作ったのでしょう??