質問編集履歴

4

編集が途中だったため

2018/03/17 10:46

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -156,11 +156,39 @@
156
156
 
157
157
 
158
158
 
159
+ - 表にキーボードから記入できるようになった
160
+
161
+ - 表に行を追加することができるようになった
162
+
163
+
164
+
165
+ お陰様で、上記二つの問題は解決いたしました。
166
+
167
+
168
+
169
+ 残る問題は
170
+
171
+
172
+
173
+ - 表に記入されているデータを参照する
174
+
175
+ - あらかじめ表にデータを入力しておく(表に入力したデータをテキストファイルか何かに保存し、それを次回に改めて表示することができる)
176
+
177
+
178
+
179
+ の二点となりました。
180
+
181
+ 何卒、解決への糸口をご教授いただければと思います。
182
+
183
+
184
+
159
185
  #### 現状
160
186
 
187
+ 解決したソースを掲載させて頂きます。
188
+
189
+
190
+
161
- 1.TableViewについてのカスタマイズ
191
+ 1.TableViewについてのカスタマイズ(ご回答頂きましたソースのままです)
162
-
163
- (ご回答頂きましたソースのままです)
164
192
 
165
193
  ```
166
194
 
@@ -512,4 +540,56 @@
512
540
 
513
541
 
514
542
 
543
+ #### やりたいこと
544
+
515
- #### 表に記入した内容を参照するためにしたこと
545
+ - 表に記入されているデータを参照する
546
+
547
+ - あらかじめ表にデータを入力しておくことができる
548
+
549
+ - ↑(表に入力したデータをテキストファイルか何かに保存し、それを次回に改めて表示することができる)
550
+
551
+
552
+
553
+
554
+
555
+ ![表のサンプル画像](0575d61e0988242da4b092033511a355.png)
556
+
557
+ 上記画像のように、選択されている行の値を参照したいと考えています。
558
+
559
+ また、上記のように表へあらかじめデータを入力しておき、その続きから改めて行の追加を行いたいと考えています。
560
+
561
+
562
+
563
+ まず、
564
+
565
+ 2列目(キーがDetailである列(上記、「現状」のコード参照))を取得しようと、以下のようにコードを書きましたが、結果的に空のStringしか取得できませんでした。
566
+
567
+ ```
568
+
569
+ partial void ClickButton_GetValue(NSObject sender)
570
+
571
+ {
572
+
573
+ var DataSource = (FreeEncodeMailer.ProductTableDataSource)TableView.DataSource;
574
+
575
+ string address = DataSource.Products[(int)TableView.SelectedRow].Title;
576
+
577
+ }
578
+
579
+ ```
580
+
581
+ →他にもいくつか試したのですが。どれもエラーを吐いてしまい、動作しませんでしたので掲載を省きました。
582
+
583
+
584
+
585
+
586
+
587
+ どうすれば、表の値を参照できるのでしょうか?
588
+
589
+ また、どうすれば「やりたいこと」を実現できるでしょうか?
590
+
591
+
592
+
593
+ 度々申し訳ございませんが、ご回答をお待ちしております。
594
+
595
+ 何卒よろしくお願いいたします。

3

追記のため

2018/03/17 10:46

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -94,7 +94,7 @@
94
94
 
95
95
 
96
96
 
97
- ### 追記(1)
97
+ ### **追記(1)**
98
98
 
99
99
 
100
100
 
@@ -145,3 +145,371 @@
145
145
 
146
146
 
147
147
  何卒よろしくお願いいたします。
148
+
149
+
150
+
151
+
152
+
153
+ ### **追記(2)**
154
+
155
+ ご回答いただきましたソースを元に、以下を作成いたしました。
156
+
157
+
158
+
159
+ #### 現状
160
+
161
+ 1.TableViewについてのカスタマイズ
162
+
163
+ (ご回答頂きましたソースのままです)
164
+
165
+ ```
166
+
167
+ using System;
168
+
169
+ using System.Collections.Generic;
170
+
171
+ using AppKit;
172
+
173
+
174
+
175
+ namespace FreeEncodeMailer
176
+
177
+ {
178
+
179
+ public class Product
180
+
181
+ {
182
+
183
+ #region Computed Propoperties
184
+
185
+ public string Title { get; set; } = "";
186
+
187
+ public string Description { get; set; } = "";
188
+
189
+ #endregion
190
+
191
+
192
+
193
+ #region Constructors
194
+
195
+ public Product()
196
+
197
+ {
198
+
199
+ }
200
+
201
+
202
+
203
+ public Product(string title, string description)
204
+
205
+ {
206
+
207
+ this.Title = title;
208
+
209
+ this.Description = description;
210
+
211
+ }
212
+
213
+ #endregion
214
+
215
+ }
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+ /// <summary>
224
+
225
+ /// TableDataSource
226
+
227
+ /// </summary>
228
+
229
+ public class ProductTableDataSource : NSTableViewDataSource
230
+
231
+ {
232
+
233
+ #region Public Variables
234
+
235
+ public List<Product> Products = new List<Product>();
236
+
237
+ #endregion
238
+
239
+
240
+
241
+ #region Constructors
242
+
243
+ public ProductTableDataSource()
244
+
245
+ {
246
+
247
+ }
248
+
249
+ #endregion
250
+
251
+
252
+
253
+ #region Override Methods
254
+
255
+ public override nint GetRowCount(NSTableView tableView)
256
+
257
+ {
258
+
259
+ return Products.Count;
260
+
261
+ }
262
+
263
+ #endregion
264
+
265
+ }
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+ /// <summary>
274
+
275
+ /// ProductTableDelegate
276
+
277
+ /// </summary>
278
+
279
+ public class ProductTableDelegate : NSTableViewDelegate
280
+
281
+ {
282
+
283
+ #region Constants
284
+
285
+ private const string CellIdentifier = "ProdCell";
286
+
287
+ #endregion
288
+
289
+
290
+
291
+ #region Private Variables
292
+
293
+ private ProductTableDataSource DataSource;
294
+
295
+ #endregion
296
+
297
+
298
+
299
+ #region Constructors
300
+
301
+ public ProductTableDelegate(ProductTableDataSource datasource)
302
+
303
+ {
304
+
305
+ this.DataSource = datasource;
306
+
307
+ }
308
+
309
+ #endregion
310
+
311
+
312
+
313
+ #region Override Methods
314
+
315
+ public override NSView GetViewForItem(NSTableView tableView, NSTableColumn tableColumn, nint row)
316
+
317
+ {
318
+
319
+ // This pattern allows you reuse existing views when they are no-longer in use.
320
+
321
+ // If the returned view is null, you instance up a new view
322
+
323
+ // If a non-null view is returned, you modify it enough to reflect the new data
324
+
325
+ NSTextField view = (NSTextField)tableView.MakeView(tableColumn.Title, this);
326
+
327
+ if (view == null)
328
+
329
+ {
330
+
331
+ view = new NSTextField();
332
+
333
+ view.Identifier = tableColumn.Title;
334
+
335
+ view.BackgroundColor = NSColor.Clear;
336
+
337
+ view.Bordered = false;
338
+
339
+ view.Selectable = false;
340
+
341
+ view.Editable = true;
342
+
343
+
344
+
345
+ view.EditingEnded += (sender, e) => {
346
+
347
+
348
+
349
+ // Take action based on type
350
+
351
+ switch (view.Identifier)
352
+
353
+ {
354
+
355
+ case "Product":
356
+
357
+ DataSource.Products[(int)view.Tag].Title = view.StringValue;
358
+
359
+ break;
360
+
361
+ case "Details":
362
+
363
+ DataSource.Products[(int)view.Tag].Description = view.StringValue;
364
+
365
+ break;
366
+
367
+ }
368
+
369
+ };
370
+
371
+ }
372
+
373
+
374
+
375
+ // Tag view
376
+
377
+ view.Tag = row;
378
+
379
+
380
+
381
+ // Setup view based on the column selected
382
+
383
+ switch (tableColumn.Title)
384
+
385
+ {
386
+
387
+ case "Product":
388
+
389
+ view.StringValue = DataSource.Products[(int)row].Title;
390
+
391
+ break;
392
+
393
+ case "Details":
394
+
395
+ view.StringValue = DataSource.Products[(int)row].Description;
396
+
397
+ break;
398
+
399
+ }
400
+
401
+
402
+
403
+ return view;
404
+
405
+ }
406
+
407
+
408
+
409
+ public override bool ShouldSelectRow(NSTableView tableView, nint row)
410
+
411
+ {
412
+
413
+ return true;
414
+
415
+ }
416
+
417
+ #endregion
418
+
419
+ }
420
+
421
+
422
+
423
+
424
+
425
+ }
426
+
427
+ ```
428
+
429
+
430
+
431
+ 2.動作を記述する部分への表記
432
+
433
+ ```
434
+
435
+ // 画面がロードされた時
436
+
437
+ public override void ViewDidLoad()
438
+
439
+ {
440
+
441
+ base.ViewDidLoad();
442
+
443
+
444
+
445
+ var DataSource = new ProductTableDataSource();
446
+
447
+ // Populate the Product Table
448
+
449
+ TableView.DataSource = DataSource;
450
+
451
+ TableView.Delegate = new ProductTableDelegate(DataSource);
452
+
453
+ }
454
+
455
+
456
+
457
+ public override NSObject RepresentedObject
458
+
459
+ {
460
+
461
+     get
462
+
463
+ {
464
+
465
+ return base.RepresentedObject;
466
+
467
+ }
468
+
469
+ set
470
+
471
+ {
472
+
473
+ base.RepresentedObject = value;
474
+
475
+ // Update the view, if already loaded.
476
+
477
+ }
478
+
479
+ }
480
+
481
+
482
+
483
+
484
+
485
+ // 追加ボタンを押すと入力できる行が追加できるようになりました
486
+
487
+ partial void ClickButton_NewAddress(NSObject sender)
488
+
489
+ {
490
+
491
+ TableView.BeginUpdates();
492
+
493
+
494
+
495
+ var DataSource = new ProductTableDataSource();
496
+
497
+ DataSource = (FreeEncodeMailer.ProductTableDataSource)TableView.DataSource;
498
+
499
+ DataSource.Products.Add(new Product("", ""));
500
+
501
+
502
+
503
+ TableView.ReloadData();
504
+
505
+ TableView.EndUpdates();
506
+
507
+ }
508
+
509
+ ```
510
+
511
+
512
+
513
+
514
+
515
+ #### 表に記入した内容を参照するためにしたこと

2

途中だった

2018/03/17 10:13

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -130,8 +130,18 @@
130
130
 
131
131
  以下、結果になります。
132
132
 
133
+ ![結果](0f33d9211a930a1814c573bb8bdb3e8f.png)
134
+
135
+ - なぜか矢印部分に「Zero」〜「Nine」までの文字か勝手に入力される
136
+
137
+ - 選択箇所の後ろ側?だけ、青く色が変わっている
138
+
139
+ - 文字の編集などはできない
133
140
 
134
141
 
135
142
 
143
+ 今後、回答で頂いたURLを読みながら少しずつ改変していきたいと思います。
136
144
 
145
+
146
+
137
- なぜか矢印部分に「Zero」〜「Nine」までの文字か勝手に入力されています。
147
+ 何卒よろしくお願いたします。

1

追記

2018/03/14 10:47

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -89,3 +89,49 @@
89
89
  何か説明不足や、疑問点があれば仰ってください。すぐに追記いたします。
90
90
 
91
91
  何卒、お知恵の拝借をよろしくお願い致します。
92
+
93
+
94
+
95
+
96
+
97
+ ### 追記(1)
98
+
99
+
100
+
101
+ ご回答いただきましたURLを元に、少しだけ改良致しました。
102
+
103
+ そのコードと、結果になります。
104
+
105
+ ```
106
+
107
+ private void aaa()
108
+
109
+ {
110
+
111
+ title_column.Title = "名前";
112
+
113
+ address_column.Title = "アドレス";
114
+
115
+
116
+
117
+ tableview.DataSource = new TableDataSource();
118
+
119
+ tableview.Delegate = new TableDelegate();
120
+
121
+
122
+
123
+ TextGrid.DocumentView = tableview;
124
+
125
+ }
126
+
127
+ ```
128
+
129
+
130
+
131
+ 以下、結果になります。
132
+
133
+
134
+
135
+
136
+
137
+ なぜか矢印部分に「Zero」〜「Nine」までの文字か勝手に入力されています。