 |
|
รบกวนขอคำปรึกษาหน่อยครับ เกียวกับการเช่าพื้นที่หลายๆที่ ประมาณ 300 บล็อค |
|
 |
|
|
 |
 |
|
ไม่ค่อยเข้าใจคำถามนะครับ เขียน เป็น OOP น่าจะได้ หรือไม่ง่าย ๆ ก็เขียนเป็น Sub เขียนครั้งเดียวแล้วก็ เรียกใช้ Sub เอาครับ
|
 |
 |
 |
 |
Date :
2013-07-29 15:21:44 |
By :
CPU4Core |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
นี้ยุค OP แล้วครับ เขียนทีเดียวแล้วนำมาใช้ได้หลายๆครั้งครับ
ลองเอาโค้ดมาดูสิครับ ว่าต้องการประมาณไหนเผื่อช่วยอธิบายได้ 
|
 |
 |
 |
 |
Date :
2013-07-29 15:47:08 |
By :
01000010 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ก็ code ก็ทั่วไปครับ กดปุ่มไหนก็ ให้มันไปอัพเดทปุ้มนั้นว่า ไม่ว่าง และอัพเดทฐานข้อมูล
แต่ละปุ่มคำสั่ง sql จะเหมือนกัน แต่ต่างกันแค่ values ที่อัพเดทครับ
ผมก็ต้องมานั่งทำ 300 กว่าชัด copy paste
เขียนแบบ sub ผมเขียนได้ครับผม แต่คิดไม่ออกว่าจะเขียนยังไง ในเมื่อแต่ละปุ่ม values มันต่างกันครับผม
ขอบคุฯครับผม
|
 |
 |
 |
 |
Date :
2013-07-29 19:48:28 |
By :
แมก |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เพิ่มเติมครับ ทุกปุ่มมันค้ือการอัพเดทครับผม
เช่นปุ่ม 1 ก็ Code (VB.NET)
update test (testpk,teststatus)values('"&"01"&"','"&"เช่าแล้ว"&"')
และปุ่มที่ 2 ก็ Code (VB.NET)
update test (testpk,teststatus)values('"&"02"&"','"&"เช่าแล้ว"&"')
|
 |
 |
 |
 |
Date :
2013-07-29 19:53:11 |
By :
แมก |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แก้ไขครับ นั้นมัน insert ผิดๆ อันนี้นะครับถูก
ปุ่มแรก
Code (VB.NET)
ีีupdate test set teststatus='"& "เช่าแล้ว" & "' where testpk='"&"01"&"'
ปุ่มสอง
Code (VB.NET)
ีีupdate test set teststatus='"& "เช่าแล้ว" & "' where testpk='"&"02"&"'
|
 |
 |
 |
 |
Date :
2013-07-29 20:26:20 |
By :
แมก |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public class MainButton : Button
{
private string m_ValueNumber;
public MainButton(string ValueNumber,Point PLocation)
{
this.Text = "ป " + ValueNumber.ToString();
m_ValueNumber = ValueNumber;
this.Size = new Size(60,60);
this.Font = new Font(Font.FontFamily,8);
this.BackColor = Color.Yellow;
this.Margin = new Padding(0);
this.Location = PLocation;
}
protected override void OnClick(EventArgs e)
{
MessageBox.Show(m_ValueNumber.ToString());
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Maximized;
this.AutoScroll = true;
short x = 0;
for (int b = 1; b <= 12; b++)
{
for (int a = 1; a <= 25; a++)
{
Button Button_Child = new MainButton(Add_Zero(x+a,3), new Point(a * 80,b * 80));
this.Controls.Add(Button_Child);
}
x += 25;
}
}
private string Add_Zero(int Number, int Amount)
{
string result = Number.ToString();
string zero = string.Empty;
int LengthNum = result.Length;
for (; LengthNum < Amount; LengthNum++)
{
zero += "0";
}
result = zero + result;
return result;
}
}
}
หมายเหตุ : ลองสร้าง Project ใหม่ขึ้นมา กดดับเบิ้ลคลิกที่ฟอร์ม แล้วนำโค้ดทั้งหมดนี้ไปวางทับของเก่า
แล้วลอง Debug ดูการทำงาน ศึกษาโค้ดในนี้ดูครับ แล้วประยุกต์กับการ Update ของคุณครับ 
|
ประวัติการแก้ไข 2013-07-29 21:19:27
 |
 |
 |
 |
Date :
2013-07-29 21:18:57 |
By :
01000010 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณ 0100 0010 ครับผม
แต่ปัญหาคือ 300 โต๊ะตอนนี้ มันไม่ได้เรียงครับ
เอาเป็นว่าผมจัดการเรื่องปุ่ม 300 ปุ่มเสร็จแล้ว
แต่ก็ยังต้องเขียน 300 ชุด ซึ่งผมนำ code MessageBox.Show(m_ValueNumber.ToString()); ไปประยุกก์แล้วมันก็ไม่แสดงค่าอะไรทั่งนั้นเพราะปุ่มผมสร้างด้วย แมนน้วล รบกวนหน่อยครับ
มีวิธีไหนอีกบ้างครับที่เขียนคำสั่งชุดเดียว แต่ปุ่มผมทำเรียบร้อยแล้วครับผม
|
 |
 |
 |
 |
Date :
2013-07-30 19:39:29 |
By :
แมก |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เพิ้มเติมครับ เผิื้อจะไม่เข้าใจ
ตอนนี้คือผมจัดเรียง 300 ชุดแล้วตามแบบแผนที่ผมต้องการ >จบ
แต่ก็ต้องเขียน 300 ชุด เพราะแต่ละปุ้ม values ไม่เหมือนกัน
รบกวนหน่อยเน้อครับ
|
 |
 |
 |
 |
Date :
2013-07-30 19:42:37 |
By :
แมก |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
1. ลบ SourceCode ออกให้หมด
2. เขียนความต้องการ [ใหม่] เอาไว้ที่อีเวน ฟอร์มโหลด (FormLoad)
Code (VB.NET)
Private Sub Form_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
For Each c As Control In Me.Controls
If TypeOf c Is Button Then
AddHandler c.Click, AddressOf JimThai
End If
Next
End Sub
Private Sub JimThai()
'TODO
End Sub
***** GoodLuck *****
|
 |
 |
 |
 |
Date :
2013-07-30 20:16:30 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แก้ไข Private Sub JimThai
(Dynamic Handler with Parameters)
Code (VB.NET)
Sub JimThai(sender As Object, e As EventArgs)
'TO DO
MsgBox(DirectCast(sender, Button).Text)
'TO DO
End Sub
|
 |
 |
 |
 |
Date :
2013-07-30 20:32:31 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมลืมบอกไปว่า #NO 6 เป็นวิธีเริ่มต้นที่ดีที่สุด
#NO 9 และ #NO 10 เป็นการแก้ไขปัญหา เฉพาะหน้า (พระเจ้าเท่านั้นเป็นผู้ประทานคำตอบ ว่าดีที่สุด)
|
 |
 |
 |
 |
Date :
2013-07-30 20:50:14 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
#NO 11 ผมลืมบอกไปว่า ที่ผมอาศัยอยู่ ไม่มีคำว่า [color=red]เทพเจ้า[/color]
|
 |
 |
 |
 |
Date :
2013-07-30 20:58:33 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อันนี้คือแรงบันดาลใจของผม (อาจจะเป็นคุณด้วยก็ได้) ครับ
Code (VB.NET)
Public Shared Function CrossOrTranspose(Of T)(source As IEnumerable(Of IEnumerable(Of T))) As IEnumerable(Of IEnumerable(Of T))
Return From r In source
From c In r.Select(Function(x, i) New KeyValuePair(Of Integer, T)(i, x))
Group c.Value By c.Key Into c = Group
Select TryCast(c, IEnumerable(Of T))
End Function
|
 |
 |
 |
 |
Date :
2013-07-30 21:08:33 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
#NO 13 ผมยอมรับครับและให้ ***** โดยที่ผมไม่ต้องลังเล (ยอดเยี่ยมมากฯ)
โดยเฉพาะบรรทัดที่ 6
|
 |
 |
 |
 |
Date :
2013-07-30 21:16:36 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อ่าครับ ต้องขอขอบพระคุณอย่างมากครับ ลดการทำงานได้เยอะเลย
แต่อยากจะทราบอีกอย่าง คือ ผมก็ต้องเขียน 300 ชุดเหมือนเดิมให้มันมาเช็คในฐานข้อมูลว่า ว่าง หรือ ไม่ว่าง แล้วมาเอาแสดงใน button ต่างๆ
Code (VB.NET)
Try
Dim P52 As New SqlDataAdapter("select zonestatus,ZONEDATEEXPIRE from zone where zonenamep='" & "ป52" & "'", strcon)
Dim d52 As New DataTable
P52.Fill(d52) 'นำคำสั่ง sql ที่รันจาก d1 มาโชไนตาราง
If d52.Rows(0)("ZONEDATEEXPIRE").ToString = Now.Date Then
ป52.Enabled = True
ป52.BackColor = Color.Yellow
ป52.Text = "ป 52"
Dim update As String
update = "update zone set zonestatus='" & "ว่าง" & "' where zonenamep='" & "ป52" & "'"
Savedata(update)
Else
If d52.Rows(0)("zonestatus").ToString = "ไม่ว่าง" Then
ป52.Enabled = False
ป52.BackColor = Color.Red
ป52.Text = "ไม่ว่าง"
Else
ป52.Enabled = True
ป52.BackColor = Color.Yellow
ป52.Text = "ป 52"
End If
End If
Catch ex As Exception
End Try
อ่าหะ 300 ชุด
พอมีแนวในการเขียนแบบ 1 ชุดเหมือนด้านบนไหมครับ
ผมถามนี้ผมลองทำแล้วนะครับ แต่ไม่สำเร็จครับ
|
 |
 |
 |
 |
Date :
2013-07-31 09:35:14 |
By :
แมก |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คนมี "เกียรติยศ/คนเก่ง" ในสายตาของผม
คือคนที่สามารถ ย่อ ปัญหาของตัวเองบนระบบงานจริง นำ Source Code (ความจริงใจ) มาตั้งเป็นคำถามได้
[x] ผมเข้าใจว่า มันหายากมากฯ
|
 |
 |
 |
 |
Date :
2013-07-31 09:56:25 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 21 เขียนโดย : ผ่านมา เมื่อวันที่ 2013-07-31 10:38:36
รายละเอียดของการตอบ ::
ตอบ คุณผ่านมา : เนื่องจากคุณผ่านมามีคำถามจะถามผมแบบลองภูมิ
ซึ่งผมยอมรับว่า ผมยังไม่เข้าใจเรื่อง Event Delegate พวกนี้อย่างแท้จริง จึงขออนุญาติไปหาข้อมูลก่อน
หลังจากได้อ่านมาบ้างแล้วก็พอเริ่มจะเข้าใจขึ้นมาบ้างแล้ว (แต่ยังไม่ทะลุปรุโปร่ง)
ซึ่งผมจะขอตอบตามความเข้าใจของผม มันอาจจะถูกบ้างผิดบ้าง ก็ขออภัยด้วยนะครับ
x1. สมมุติว่าผมแกล้งไม่เข้าใจจริงฯ สองบรรทัีดด้านล่างมันแตกต่างกันอย่างไร? ครับ
สองบรรทัดนี้ มันน่าจะมีความหมายเหมือนกันแค่มันแบบเต็ม กับแบบย่อ เหมือนที่คุณ ห้ามตอบเกินวันละ 2 กระทู้ กล่าว
Code (VB.NET)
AddHandler c.Click, New EventHandler(AddressOf JimThai)
ขออนุญาติแปลงเป็น C#
Code (C#)
c.Click += new EventHandler(JimThai);
บรรทัดบนนี้ น่าจะมีความหมายว่า สร้างอินสแตนของ delegate และกำหนดให้ (Member Event)Click ของคลาส Button มีการชี้ Method ไปยัง Sub JimThai เมื่อเกิดเหตุการณ์คลิก ก็จะวิ่งไปทำงานในเมธอด JimThai ที่ถูกชี้อยู่
x2. สมมุติว่าผมแกล้งไม่เข้าใจจริงฯ ทำไมเราต้องแปลง Object ครับ (Cast Object)
ข้อนี้เหมือนคุณ ห้ามตอบเกินวันละ 2 กระทู้ จะตอบแบบเคลียร์ไปแล้ว
แต่ถ้าตอบตามที่ผมเข้าใจ ก็จะตอบว่า คลาส Object มันคือคลาสแม่ของทุกคลาสใน .net
ซึ่งจะเก็บ Class ใดลงไปก็ได้ แต่มันจะมองไม่เห็น Property และ Method ของคลาสเหล่านั้นให้เรียกใช้
ซึ่งจะต้องมีการ แปลง เป็นคลาสนั้น หรือคลาสในสายที่มันสืบทอดมาก่อน ถึงจะเรียกใช้ Property และ Method ได้ครับ
|
 |
 |
 |
 |
Date :
2013-08-01 09:00:30 |
By :
01000010 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (VB.NET)
Try
Dim P52 As New SqlDataAdapter("select zonestatus,ZONEDATEEXPIRE from zone where zonenamep='" & "ป52" & "'", strcon)
Dim d52 As New DataTable
P52.Fill(d52) 'นำคำสั่ง sql ที่รันจาก d1 มาโชไนตาราง
If d52.Rows.Count > 0 Then '*****
If d52.Rows(0)("ZONEDATEEXPIRE") = Now.Date Then '*****
ป52.Enabled = True
ป52.BackColor = Color.Yellow
ป52.Text = "ป 52"
Dim update As String
update = "update zone set zonestatus='" & "ว่าง" & "' where zonenamep='" & "ป52" & "'"
Savedata(update)
Else
If d52.Rows(0)("zonestatus").ToString = "ไม่ว่าง" Then
ป52.Enabled = False
ป52.BackColor = Color.Red
ป52.Text = "ไม่ว่าง"
Else
ป52.Enabled = True
ป52.BackColor = Color.Yellow
ป52.Text = "ป 52"
End If
End If
Else
'TODO
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
|
 |
 |
 |
 |
Date :
2013-08-02 08:38:07 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อ้างถึงหัวข้อที่ #NO27 ความมุ่งมั่นพยายาม
Code (VB.NET)
Sub JimThai(sender As Object, e As EventArgs)
Dim b As Button = DirectCast(sender, Button)
MsgBox(b)
'TO DO
Call Beautiful(b)
End Sub
Sub Beautiful(ByVal b As Button)
Try
Dim P52 As New SqlDataAdapter("select zonestatus,ZONEDATEEXPIRE from zone where zonenamep='" & b.Text & "'", strcon)
Dim d52 As New DataTable
P52.Fill(d52) 'นำคำสั่ง sql ที่รันจาก d1 มาโชไนตาราง
If d52.Rows.Count > 0 Then '*****
If d52.Rows(0)("ZONEDATEEXPIRE") = Now.Date Then '*****
b.Enabled = True
b.BackColor = Color.Yellow
'b.Text = b.Text
Dim update As String
update = "update zone set zonestatus='" & "ว่าง" & "' where zonenamep='" & b.Text & "'"
Savedata(update)
Else
If d52.Rows(0)("zonestatus").ToString().Trim() = "ไม่ว่าง" Then
b.Enabled = False
b.BackColor = Color.Red
b.Text = "ไม่ว่าง"
Else
b.Enabled = True
b.BackColor = Color.Yellow
'b.Text = b.Text
End If
End If
Else
'TODO
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
|
 |
 |
 |
 |
Date :
2013-08-02 08:57:19 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
*****
Code (VB.NET)
Private Sub Form_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
For Each c As Control In Me.Controls
If TypeOf c Is Button Then
AddHandler c.Click, AddressOf JimThai
c.Tag = c.Text '***** เก็บค่าเดิมเอาไว้อ้างอิง
End If
Next
End Sub
Sub JimThai(sender As Object, e As EventArgs)
Dim b As Button = DirectCast(sender, Button)
MsgBox(b)
'TO DO
Call Beautiful(b)
End Sub
Sub Beautiful(ByVal b As Button)
Try
Dim P52 As New SqlDataAdapter("select zonestatus,ZONEDATEEXPIRE from zone where zonenamep='" & b.Text & "'", strcon)
Dim d52 As New DataTable
P52.Fill(d52) 'นำคำสั่ง sql ที่รันจาก d1 มาโชไนตาราง
If d52.Rows.Count > 0 Then '*****
If d52.Rows(0)("ZONEDATEEXPIRE") = Now.Date Then '*****
b.Enabled = True
b.BackColor = Color.Yellow
b.Text = b.Tag ' *****
Dim update As String
update = "update zone set zonestatus='" & "ว่าง" & "' where zonenamep='" & b.Text & "'"
Savedata(update)
Else
If d52.Rows(0)("zonestatus").ToString().Trim() = "ไม่ว่าง" Then
b.Enabled = False
b.BackColor = Color.Red
b.Text = "ไม่ว่าง"
Else
b.Enabled = True
b.BackColor = Color.Yellow
b.Text = b.Tag ' *****
End If
End If
Else
'TODO
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
***** GoodLuck *****
|
 |
 |
 |
 |
Date :
2013-08-02 09:30:18 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แสบสันต์ Me.Controls.OfType(Of Button)() '    
|
 |
 |
 |
 |
Date :
2013-08-02 11:37:47 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมคิดว่าน่าจะมีวิธีที่ดีกว่านี้ (Without Recursive Controls)
Code (VB.NET)
Me.Controls.OfType(Of Button)().ToList().ForEach(Sub(c As Button)
AddHandler c.Click, AddressOf xxx
c.Tag = c.Text
End Sub)
|
 |
 |
 |
 |
Date :
2013-08-02 12:01:40 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เยี่ยม ๆ
|
 |
 |
 |
 |
Date :
2013-08-02 17:18:54 |
By :
mr.win |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|