Đến nội dung


Hình ảnh
- - - - -

Set ActiveLayer trong vb.net


  • Please log in to reply
7 replies to this topic

#1 HTTP

HTTP

    biết pan

  • Members
  • Pip
  • 7 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 27 November 2008 - 09:20 AM

Mình dùng cad2009 và vb2005 để vẽ nhưng nếu sử dụng library của cad thì vẫn set ActiveLayer được nhưng khi không sử dụng thì lệnh này báo lỗi.


Dim AcadApp As Object 'AcadApplication 'ứng dụng autocad
Dim Strlayer As String
Dim Tenlayer As Object

AcadApp.ActiveDocument.Linetypes.Load("continuous", "acad.lin")
AcadApp.ActiveDocument.Linetypes.Load("Acad_Iso03W100", "acad.lin")
Strlayer = "Layermoi"
Tenlayer = AcadApp.ActiveDocument.Layers.Add(Strlayer)
With LayerChusolieu
.Linetype = "continuous"
.color = acColor.acGreen 'lệnh này gây lỗi????????????????
.LayerOn = True
.Lock = False
.Lineweight = .ACAD_LWEIGHT.acLnWtByLwDefault ''lệnh này gây lỗi?????????
End With

AcadApp.ActiveDocument.ActiveLayer = Tenlayer 'lệnh này gây lỗi khi chạy

Bác nào khắc phục được xin chỉ giáo với. mình xin cảm ơn!
  • 0

#2 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 10 December 2008 - 01:00 PM

Mình dùng cad2009 và vb2005 để vẽ nhưng nếu sử dụng library của cad thì vẫn set ActiveLayer được nhưng khi không sử dụng thì lệnh này báo lỗi.


Dim AcadApp As Object 'AcadApplication 'ứng dụng autocad
Dim Strlayer As String
Dim Tenlayer As Object

AcadApp.ActiveDocument.Linetypes.Load("continuous", "acad.lin")
AcadApp.ActiveDocument.Linetypes.Load("Acad_Iso03W100", "acad.lin")
Strlayer = "Layermoi"
Tenlayer = AcadApp.ActiveDocument.Layers.Add(Strlayer)
With LayerChusolieu
.Linetype = "continuous"
.color = acColor.acGreen 'lệnh này gây lỗi????????????????
.LayerOn = True
.Lock = False
.Lineweight = .ACAD_LWEIGHT.acLnWtByLwDefault ''lệnh này gây lỗi?????????
End With

AcadApp.ActiveDocument.ActiveLayer = Tenlayer 'lệnh này gây lỗi khi chạy

Bác nào khắc phục được xin chỉ giáo với. mình xin cảm ơn!


Vì không dùng thư viện của acad nên không thể dùng các enum của acad được
phải đổi lại code như sau:
'Tenlayer = AcadApp.ActiveDocument.Layers.Add(Strlayer)
Set Tenlayer = AcadApp.ActiveDocument.Layers.Add(Strlayer)
....
'.color = acColor.acGreen 'lệnh này gây lỗi????????????????
.color = "3"
....
' .Lineweight = .ACAD_LWEIGHT.acLnWtByLwDefault ''lệnh này gây lỗi?????????
.Lineweight = -3
....
  • 0

#3 HTTP

HTTP

    biết pan

  • Members
  • Pip
  • 7 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 10 December 2008 - 02:20 PM

Cảm ơn bác!
AcadApp.ActiveDocument.ActiveLayer = Tenlayer 'lệnh này gây lỗi khi chạy
còn cái lỗi chính này bác có fix được ko. cái này mà không được thì cái trên cũng không có tác dụng.
  • 0

#4 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 10 December 2008 - 02:32 PM

Cảm ơn bác!
AcadApp.ActiveDocument.ActiveLayer = Tenlayer 'lệnh này gây lỗi khi chạy
còn cái lỗi chính này bác có fix được ko. cái này mà không được thì cái trên cũng không có tác dụng.

Vì bạn không post đầy đủ để hàm chạy được nên tôi có sửa lại chút ít và tôi đã test và chạy tốt.
Dòng lệnh
AcadApp.ActiveDocument.ActiveLayer = Tenlayer
không có lỗi mà vì Tenlayer là 1 object nên phải dùng thêm Set ở trước khi gán
Set Tenlayer = AcadApp.ActiveDocument.Layers.Add(Strlayer)thì dòng
AcadApp.ActiveDocument.ActiveLayer = Tenlayer
chạy sẽ không bị lỗi
  • 0

#5 HTTP

HTTP

    biết pan

  • Members
  • Pip
  • 7 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 12 December 2008 - 08:04 PM

tôi dùng vb2005 không cần dùng lệnh set. nếu đánh lệnh này thì nó cũng tự xoá đi mà chỉ thành 1 dòng như trên thôi.
  • 0

#6 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 14 December 2008 - 10:38 PM


With LayerChusolieu
.Linetype = "continuous"
[color="#FF0000"].color = acGreen[/color]
.LayerOn = True
.Lock = False
[color="#FF0000"].Lineweight = .acLnWtByLwDefault[/color]
End With

AcadApp.ActiveDocument.ActiveLayer = Tenlayer 'lệnh này gây lỗi khi chạy

Bác nào khắc phục được xin chỉ giáo với. mình xin cảm ơn!


Đối tượng lớp LayerChusolieu không thấy khai báo?

Bạn thử sửa lại code như trên xem sao?
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#7 HTTP

HTTP

    biết pan

  • Members
  • Pip
  • 7 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 16 December 2008 - 06:05 PM

đúng là layer LayerChusolieu phải đổi tên thành Tenlayer. hai lỗi trên mình đã fix thành số như bạn hướng dẫn và được rồi. nhưng dòng set Activelayer không chạy được, nó vẫn báo lỗi member not found. Mình đã chuyển sang sử dụng library rồi nhưng mình nghĩ đây cũng là cách hay để dùng với nhiều phiên bản Cad.
  • 0

#8 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 28 December 2008 - 12:14 PM

đúng là layer LayerChusolieu phải đổi tên thành Tenlayer. hai lỗi trên mình đã fix thành số như bạn hướng dẫn và được rồi. nhưng dòng set Activelayer không chạy được, nó vẫn báo lỗi member not found. Mình đã chuyển sang sử dụng library rồi nhưng mình nghĩ đây cũng là cách hay để dùng với nhiều phiên bản Cad.


Tenlayer phải là AcadLayer và phải tồn tại trong bản vẽ hiện tại, nếu không có thì nó báo lỗi. Ví dụ về khai báo và sử dụng Layer:

	Dim newLayer As AcadLayer

' Tạo Layer mới và kích hoạt nó hiện hành
Set newLayer = ThisDrawing.Layers.Add("TestLayer")
ThisDrawing.ActiveLayer = newLayer
MsgBox "The new layer is " & newLayer.name, vbInformation, "ActiveLayer Example"

  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!