teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

補足として追記

2017/11/06 07:40

投稿

dodox86
dodox86

スコア9398

answer CHANGED
@@ -14,9 +14,10 @@
14
14
  ---
15
15
  **追記**:理由があってポインターを使っているとのことでしたので追記しました。
16
16
 
17
- 最終的にどのように使われるかを推測しかねているのですが、テキストボックスのテキストをセットするプロパティ`TextBox.Text`はstring(System.String)型のプロパティなので、キャストしてセットできる部分では無いです。
17
+ 最終的にどのように使われるかを推測しかねているのですが、テキストボックスのテキストをセットするプロパティ`TextBox.Text`はstring(System.String)型のプロパティなので、キャストしてセットできる部分では無いです。元のstringをchar* でポインターを介して操作した後にTextBox.Text にセットすれば目的を達せられるのではないでしょうか。
18
- 元のstringをchar* でポインターを介して操作した後にTextBox.Text にセットすれば目的を達せられるのではないでしょうか。
19
18
 
19
+ あるいは`textBox1.Text = new string(p_str);` の1行でいいかもしれません。
20
+
20
21
  質問者様の使われ方に合致しているか分かりませんが、以下、例です。元のstr を編集してtextBox1にセットし、その文字列をもとにstr2を生成して編集し、textBox2にセットします。
21
22
  ```C#
22
23
  private unsafe void button1_Click(object sender, EventArgs e)

1

質問内容に合致するよう追記

2017/11/06 07:39

投稿

dodox86
dodox86

スコア9398

answer CHANGED
@@ -10,4 +10,43 @@
10
10
  // textBox1 は System.Windows.Forms.TextBoxクラス
11
11
  textBox1.Text = str;
12
12
  }
13
- ```
13
+ ```
14
+ ---
15
+ **追記**:理由があってポインターを使っているとのことでしたので追記しました。
16
+
17
+ 最終的にどのように使われるかを推測しかねているのですが、テキストボックスのテキストをセットするプロパティ`TextBox.Text`はstring(System.String)型のプロパティなので、キャストしてセットできる部分では無いです。
18
+ 元のstringをchar* でポインターを介して操作した後にTextBox.Text にセットすれば目的を達せられるのではないでしょうか。
19
+
20
+ 質問者様の使われ方に合致しているか分かりませんが、以下、例です。元のstr を編集してtextBox1にセットし、その文字列をもとにstr2を生成して編集し、textBox2にセットします。
21
+ ```C#
22
+ private unsafe void button1_Click(object sender, EventArgs e)
23
+ {
24
+ string str = "1234567890";
25
+ string str2 = null;
26
+
27
+ fixed (char* p_str = str)
28
+ {
29
+ // ポインターを経由してstrを編集
30
+ *(p_str + 0) = 'A';
31
+ *(p_str + 1) = 'B';
32
+
33
+ // 編集後のstrの内容を用いてSystem.String(char *)のコンストラクタで生成
34
+ str2 = new string(p_str);
35
+ fixed (char* p_str2 = str2)
36
+ {
37
+ // str2をポインター経由で編集
38
+ *(p_str2 + 2) = 'C';
39
+ *(p_str2 + 3) = 'D';
40
+ }
41
+ }
42
+
43
+ // str == "AB34567890"
44
+ textBox1.Text = str;
45
+
46
+ // str2 == "ABCD567890"
47
+ textBox2.Text = str2;
48
+ }
49
+ ```
50
+ 以下のようになります。
51
+
52
+ ![イメージ説明](235e940948670da258c933cb4f62f767.png)